2

これは、O'ReillyのLearn PHP、MySQL、およびJavascriptから取得したものです。

function sanitizeString($var)
{
    $var = stripslashes($var);
    $var = htmlentities($var);
    $var = strip_tags($var);
    return $var;
}

function sanitizeMySQL($var)
{
    $var = sanitizeString($var);
    $var = mysql_real_escape_string($var);
    return $var;
}

POSTこれが処理とGETデータに必要なすべてですか?ソースを考えると、これは初心者にとっては呆然としているのではないかと心配しており、後で攻撃を受けやすくなっています。

ありがとうございました。

4

4 に答える 4

4

古いMySQLドライバーとを使用するのではなく、プリペアドステートメントPDOmysql_real_escape_stringなど)をサポートする最新のドライバーを使用します。

htmlentities'<'および'>'を同等のHTML文字エンティティに変換するため、strip_tagsafterhtmlentitiesを呼び出しても影響はありません。

stripslashesマジッククォートが有効になっている場合にのみ呼び出す必要があります(これを使用get_magic_quotes_gpcget_magic_quotes_runtimeてテストします)。

于 2009-12-31T01:55:32.630 に答える
3

受信データを一般的かつ無差別に「サニタイズ」することはできません。それは常にあなたがそれで何をしたいかに依存します。

sanitizeString()メソッドは、ページのHTML出力内に表示される信頼できないコンテンツ(たとえば、セキュリティで保護されていないフォームから)をクリーンアップするのに適しています。他には何もありません。タグなどの情報を削除し、特殊文字を変更します。

sanitizeMySQL()メソッドはそれを行い、さらにmySQLクエリで安全に使用できるようにします。繰り返しになりますが、これは、ゲストブックやシャウトボックスなどのユーザー入力を削除する場合にのみ役立ちます。許可されたユーザーがいるCMSがある場合は、これを実行したくないでしょう。

いかなる状況でも、これをすべての入力変数に常に適用するわけではありません。たとえば、電子メールを介して転送される注文フォームがある場合、htmlspecialchars()すべての特殊文字がエンティティに変換されます&quot;。これは、テキストのみの電子メールで文字通り(のように)表示されます。あなたはそれをしたくないでしょう。

これが良い答えだと思うところでどの衛生状態を使用するかについての一般的な概要について。さらに、受信データに基づいて電子メールを送信する場合は、メールインジェクションを確認してください。

于 2009-12-31T01:55:18.963 に答える
1

ユーザー入力を安全にする魔法の弾丸機能はありません。それは、ユーザーが何をするかに完全に依存しているからです。たとえば、テキストボックスがあり、それを上記の関数で使用すると、次の文字列がクリアされます。

javascript:someFunction()

これは問題ではありません...リンクのonclick属性でそのユーザー入力を使用しない限り。ありそうもない?もちろん。しかし、それは反例による証拠です。

ユーザー入力を何に使用しているのか、どのような脆弱性が導入または悪用される可能性があるのか​​を理解してから、適切に行動する必要があります。

mysql_real_escape_string()SQLインジェクションを停止するには十分なので、簡単です。XSSを停止することは、はるかに曖昧です。

于 2009-12-31T01:54:30.667 に答える
0

良いスタート。理想的には、自由形式ではないものについては、switchステートメント(またはその他)の入力を使用して、ハードコードされた値を検索してSQLに入力できます。それは、消毒が見逃したものを防ぐのに役立ちます。

于 2009-12-31T01:51:48.423 に答える