{"id":20790386,"url":"https://github.com/paragonie/ionizer","last_synced_at":"2025-05-05T20:26:29.667Z","repository":{"id":52802201,"uuid":"120354280","full_name":"paragonie/ionizer","owner":"paragonie","description":"Input Filter System for PHP Software","archived":false,"fork":false,"pushed_at":"2024-05-11T22:19:17.000Z","size":69,"stargazers_count":33,"open_issues_count":1,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-05T20:26:04.500Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paragonie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-02-05T19:56:05.000Z","updated_at":"2024-11-15T03:47:09.000Z","dependencies_parsed_at":"2024-05-11T22:33:55.939Z","dependency_job_id":"b58e9fd0-7acc-4232-8b2e-6858837047e6","html_url":"https://github.com/paragonie/ionizer","commit_stats":{"total_commits":34,"total_committers":1,"mean_commits":34.0,"dds":0.0,"last_synced_commit":"c17ea78f0453add15b5b8e170bf95b8cf91659ba"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paragonie%2Fionizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paragonie%2Fionizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paragonie%2Fionizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paragonie%2Fionizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paragonie","download_url":"https://codeload.github.com/paragonie/ionizer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252569756,"owners_count":21769535,"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-11-17T15:34:35.573Z","updated_at":"2025-05-05T20:26:29.649Z","avatar_url":"https://github.com/paragonie.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ionizer\n\n[![Build Status](https://github.com/paragonie/ionizer/actions/workflows/ci.yml/badge.svg)](https://github.com/paragonie/ionizer/actions)\n[![Latest Stable Version](https://poser.pugx.org/paragonie/ionizer/v/stable)](https://packagist.org/packages/paragonie/ionizer)\n[![Latest Unstable Version](https://poser.pugx.org/paragonie/ionizer/v/unstable)](https://packagist.org/packages/paragonie/ionizer)\n[![License](https://poser.pugx.org/paragonie/ionizer/license)](https://packagist.org/packages/paragonie/ionizer)\n[![Downloads](https://img.shields.io/packagist/dt/paragonie/ionizer.svg)](https://packagist.org/packages/paragonie/ionizer)\n\nIonizer provides strict typing and input validation for dynamic inputs (i.e. HTTP request parameters).\n**Requires PHP 7 or higher.**\n\n## What is Ionizer?\n\nIonizer is a structured input filtering system ideal for HTTP form data.\n\n### Why is Ionizer important?\n\nAside from the benefits of being able to strictly type your applications that accept user input,\nIonizer makes it easy to mitigate [some NoSQL injection techniques](https://www.php.net/manual/en/mongodb.security.request_injection.php).\n\n## Installing\n\nGet Composer, then run the following:\n\n```terminal\ncomposer require paragonie/ionizer\n```\n\n## Usage\n\n```php\n\u003c?php\n\nuse ParagonIE\\Ionizer\\GeneralFilterContainer;\nuse ParagonIE\\Ionizer\\Filter\\{\n    StringFilter,\n    AllowList\n};\n\n// Define properties to filter:\n$ic = new GeneralFilterContainer();\n$ic-\u003eaddFilter(\n        'username',\n        (new StringFilter())-\u003esetPattern('^[A-Za-z0-9_\\-]{3,24}$')\n    )\n    -\u003eaddFilter('passphrase', new StringFilter())\n    -\u003eaddFilter(\n        'domain',\n        new AllowList('US-1', 'US-2', 'EU-1', 'EU-2')\n    );\n\n// Invoke the filter container on the array to get the filtered result:\ntry {\n    // $post passed all of our filters.\n    $post = $ic($_POST);\n} catch (\\TypeError $ex) {\n    // Invalid data provided.\n}\n```\n\nIonizer can even specify structured input with some caveats.\n\n```php\n\u003c?php\n\nuse ParagonIE\\Ionizer\\GeneralFilterContainer;\nuse ParagonIE\\Ionizer\\Filter\\{\n    IntFilter,\n    IntArrayFilter,\n    StringArrayFilter,\n    StringFilter\n};\n\n$ic = new GeneralFilterContainer();\n    // You can type entire arrays at once:\n$ic-\u003eaddFilter('numbers', new IntArrayFilter())\n    -\u003eaddFilter('strings', new StringArrayFilter())\n    \n    // You can also specify subkeys, separated by a period:\n    -\u003eaddFilter('user.name', new StringFilter())\n    -\u003eaddFilter('user.unixtime', new IntFilter());\n\n$input = [\n    'numbers' =\u003e [1, 2, 3],\n    'strings' =\u003e ['a', 'b'],\n    'user' =\u003e [\n        'name' =\u003e 'test',\n        'unixtime' =\u003e time()\n    ]    \n];\n\ntry {\n    $valid = $ic($input);\n} catch (\\TypeError $ex) {\n}\n```\n\n## Support Contracts\n\nIf your company uses this library in their products or services, you may be\ninterested in [purchasing a support contract from Paragon Initiative Enterprises](https://paragonie.com/enterprise).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparagonie%2Fionizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparagonie%2Fionizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparagonie%2Fionizer/lists"}