{"id":15524957,"url":"https://github.com/ericmann/contacts","last_synced_at":"2025-10-03T20:17:28.828Z","repository":{"id":142785125,"uuid":"133194308","full_name":"ericmann/contacts","owner":"ericmann","description":"This is an iterative demo application prepared for php[tek] 2018.","archived":false,"fork":false,"pushed_at":"2018-11-12T13:37:55.000Z","size":293,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-31T02:10:27.691Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ericmann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-13T00:46:03.000Z","updated_at":"2018-11-12T13:37:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"0c3814b3-993a-4bf7-be31-cfd50f4e8f02","html_url":"https://github.com/ericmann/contacts","commit_stats":{"total_commits":14,"total_committers":2,"mean_commits":7.0,"dds":0.3571428571428571,"last_synced_commit":"15078143c35d848ddb2b6394eb432f2b1d013ed1"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ericmann/contacts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmann%2Fcontacts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmann%2Fcontacts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmann%2Fcontacts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmann%2Fcontacts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ericmann","download_url":"https://codeload.github.com/ericmann/contacts/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmann%2Fcontacts/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264428787,"owners_count":23606691,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T10:53:38.247Z","updated_at":"2025-10-03T20:17:23.795Z","avatar_url":"https://github.com/ericmann.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Contacts Demo\n\nThis is an iterative demo application prepared for php[world] 2018. It's divided into multiple _modules_, each of which is intended to be a standalone lesson in PHP security.\n\nEach module subdirectory contains:\n\n- `index.php`  A basic http router to power a built-in PHP server\n- `util.php`   Various utility functions provided to make life easier during the lesson at hand\n- `lesson.php` The actual code for that given lesson - most with placeholders\n\n## Installation\n\nComposer dependencies are bundled in the repository to make it easier to clone and get started with this project. If for any reason you want to _update_ your dependencies, merely do so with `composer update`.\n\nThe first step is to install Composer dependencies in the project root:\n\nThe modules themselves are self-contained and share their dependencies.\n\n## Running\n\nEach module is a self-contained application and is meant to be worked on one at a time. Merely `cd` into the target directory, then run the following to start the PHP webserver:\n\n```sh\nphp -S localhost:8888 -t module-1\n```\n\nThe application itself can now be [viewed in a web browser](http://localhost:8888).\n\nAlternatively, with Docker:\n\n```sh\n./dockphp -S 0.0.0.0:8888 -t module-1\n```\n\n**Note:** You can only run one application at a time as they share the same port.\n\n## Understanding the Lessons\n\nEach lesson is built to cover a specific topic regarding PHP security. As such, there are several placeholder `@TODO`s throughout the code that are meant for you to complete. Each is documented explaining what's expected from you to complete the task.\n\nThe lessons are structured into the following modules:\n\n**1. Authentication**\n\n`module-1`\n\n- Password management\n- Password storage\n- Password hashing\n- Account reset tokens\n\n**2. Credential Management**\n\n`module-2`\n\n**3. Encryption**\n\n- File encryption (`/module-3`)\n- Database encryption (`/module-3-2`)\n\n**4. Session Management**\n\n`/module-4`\n\n- Server-side data management\n\n**5. Data validation**\n\n`/module-5`\n\n- Input sanitization\n\n**6. Long-term Trust**\n\n`module-6`\n\n- Document signing","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericmann%2Fcontacts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericmann%2Fcontacts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericmann%2Fcontacts/lists"}