PHP / MySQL 初心者のビット...
表示名、ユーザー名、パスワードなどのユーザー情報を格納するために MySQL データベースを使用する PHP ベースのサイトを構築しています。
私は、エスケープ、準備されたステートメントなどについて学んでおり、"bobby'); drop table users--" のような SQL インジェクションを防ぐ方法を学んでいます。
DBに登録するために、PDOプリペアドステートメントを使用してフォームからユーザー入力を取得しています。ただし、いくつかのことを知る必要があります。
表示名、ユーザー名、パスワードなどに準備済みステートメントを使用しているため、@、#、$、または「一重引用符」や「二重引用符」などの特殊文字を使用しても問題ありませんか? スペース、国際文字、アクセントのある文字、または ♥ のようなものはどうですか? そして、これらの文字を許可しても「大丈夫」かどうか尋ねると、人々のユーザー名に引用符や括弧を許可したり、太字や斜体の html タグなどを許可したりすることで、さらにセキュリティ上のリスクが生じるのではないかと考えています。
ほとんどの特殊文字を許可しても、一部を許可しない場合: (MySQL の範囲内で) 絶対に違法にする必要がある特定の「危険な」文字はありますか? (引用はこのアジェンダに合うかもしれないと思いますが、それについてはさまざまな兆候があります。)
典型的な「英数字とアンダースコア」の範囲外の文字を許可する場合、後で (MySQL、SQL、または PHP で) 変な文字を許可することで発生する可能性のある落とし穴はありますか? 人々のユーザー名を表示するときに、HTML タグを実際のタグではなく文字列として表示する必要がありますか? または、クエリを実行したいときはいつでも、人々のユーザー名の引用符をエスケープする必要がありますか? それとも、PDO で準備済みステートメントを使用するので、これは問題になりませんか?
utf8 や utf16 のような文字セットは、Web サイトでこれらのアルファベットをレンダリングできることを確認しながら、幅広い表示名とユーザー名を受け入れることができるようにするために、どこにでも使用できますか?
英語と同じように見えるキリル文字がいくつかあることを私は知っています。私はこれらを MS Word からそのままコピーして、自分のユーザー名に使用していました。英語の「a」をキリル文字の「a」に置き換えるだけで、これらを使用して他のメンバーを知覚的に偽装できることがわかりました。誰かが代替コードに精通していない場合、♥ が含まれるユーザー名を検索するのが難しい場合があります。これは心配する必要がありますか?これについてどう思いますか。
これについて私に洞察を与えることができる人に前もって感謝します。