アプリのテストはよくできていますが、多くの人は気にしません。その文字列をデータベースに保存しても問題はありません。変更すると、他の有効なエントリに問題が発生する可能性があります。vstm が言うように、使用するときはエスケープしてください。
ただし、具体的には「名」フィールドについて話しているため、名前に a/
が含まれる名前を拒否するなど、さらに検証できる可能性があります。名前の一部としてそれを含む言語は知りません。もしあれば、どのように発音されているのか知りたいです。おそらく. = \
そのリストに他のものを追加することもできますが、あまり夢中にならないでください.
フォーム内のすべてのフィールドについて、受け取ると合理的に予想される入力について慎重に検討し、それに応じて入力を検証する必要があります。検証に合格しないものはすべて拒否されます。のような文字列'<script>window.location = "http://www.google.com";</script>'
は、人の名前を期待するフィールドの検証に合格することは絶対にありません。
個人的には、入力をフィルタリングすることはありません。検証に合格して受け入れられるか、不合格で拒否されます。フィルタリングして悪い入力から良い入力を作ることができないため、拒否され、ユーザーはデータの再入力を求められます。たとえばStripTags
、
<script>window.location = "http://www.google.com";</script>
あなたを残します
window.location = " http://www.google.com ";
これはまだ有効な名前ではなく、拒否する必要があります。
検証が常に 100% 機能することはありません。そのため、ユーザー入力から受け取った値をブラウザーにエコーする前に常にエスケープする必要があります。
Zend Framework には、使用できる多数のバリデーターがあり、PHP で既に使用できるバリデーターとフィルターを忘れないでください。これらを適切に使用すれば、悪意のある入力によってアプリケーションや、さらに重要なユーザーが被害を受けるリスクを大幅に減らすことができます。
これらのバリデーターとフィルターは使用するために用意されていますが、PHP も Zend Framework も期待されるデータの種類を認識していません。そのため、ドキュメントを読んで、それらがどのように機能するか、どのように使用するか、いつ使用するかを正確に理解することが非常に重要です。それらを使用します。
The Web Application Security Projectには優れたリソースがあり、すべての Web 開発者が死ぬほど読むことを強いられるべきです。
tl;dr
入力を検証し、出力をエスケープします。