ユーザーがいくつかのテキスト フィールドを含むフォームを送信できるようにするとします (パスワードの話ではありません)。ユーザーはロシア語や中国語などの非 ASCII 文字を使用することがあるので、データベースでは UTF-8 文字セットを使用しています。問題は、考えられるすべての UTF-8 文字を本当に許可する必要があるかということです。ASCII テーブルを調べたところ、0 から 31 までの文字は、改行と空白を除いて、テキストとは何の関係もないことがわかりました。文字 176 から 223 は装飾目的のようです :p. それらを制限する必要がありますか?
質問する
1723 次
4 に答える
6
W3C は、多言語フォーム エンコーディングの正規表現の例でこれらの文字をスキップします。
$field =~
m/\A(
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*\z/x;
于 2009-08-11T22:37:24.467 に答える
5
有効な UTF-8 および Unicode であることを確認してください。 はい
制御コードなどの特定の文字が含まれていないことを確認してください。 おそらく必要ない
フォームで UTF-8 を使用していても、ユーザー エージェントがフォーム データを送信するときに、すべてのユーザー エージェントから有効な UTF-8 を取得できない可能性があることに注意してください。必要に応じてフィルタリングする必要があります。無効な UTF-8 は多くの形式を取ることができます。
- 長すぎるエンコーディング (セキュリティの問題につながる可能性があります)
- その他の無効な UTF-8 バイト シーケンス。これは、ユーザー エージェントが文字エンコーディングを無視し、代わりに Windows-1252 または ISO-8859-1 エンコーディングなどを送信したことを示している可能性があります。
- Unicode の予約されたサロゲート スペースにあるコード ポイント
上記のすべてを入力中に除外する必要があります。そうしないと、有効な Unicode を格納できません。
Unicode のサブセットを使用する有効な HTML または XHTML を提供する場合は、(入力または出力のいずれかで) 除外する必要もあります。
- C0 制御コード 0x00 ~ 0x19 (タブ、スペース、改行、改行を除く)
- 0x7F
- C1 制御コード 0x80 ~ 0xBF
- (おそらく) 0x10FFFF を超える任意のコード ポイント
于 2009-08-12T07:23:59.503 に答える
1
いいえ。
ユーザー入力を「事前にクリーンアップ」しようとするのは非常に悪い考えです。あなたが「装飾的」と考えるものは、他の言語の読者にとって絶対に必要なものかもしれません. 最善の解決策は、テキストをそのままデータベースに保存し、ページに書き込む前にサニタイズすることです。
于 2009-08-11T22:39:17.130 に答える