1

重複の可能性:
PHPでSQLインジェクションを防ぐための最良の方法

私のサイトには、ユーザーがデータベースに保存しなければならないHTMLコンテンツがいくつかあります。これを行うための安全な方法は何ですか(データベースが危険にさらされたり、後でそのコードが表示されるユーザーがデータベースから呼び出されたりしないようにします)。

だから私が読んだのは:

htmlentitiesを使用してデータベースにデータを保存し、html_entity_decodeを使用してデータベースからデータをデコードします。これは十分に安全ですか、それとも他のものを使用する必要がありますか?

4

2 に答える 2

5

文字列のエスケープやプリペアドステートメントを使用している場合、HTMLマークアップによってデータベースが損傷することはありません。HTMLマークアップの危険性は、ユーザーに表示するときに発生します。表示するマークアップに誰かが不快なHTMLを挿入した場合、XSS攻撃を受けます。

プリペアドステートメントをエスケープまたは使用していない場合、外部からのほとんどすべてのデータが危険になる可能性があります。

于 2012-07-29T09:02:03.450 に答える
0

PHP関数を確認することをお勧めしますmysql_real_escape_string()...この投稿の詳細:文字列からHTMLを削除するのに十分なstrip_tags?

ここに例があります...

// scrub string ... call with sanitize($blah,1) to allow HTML
function sanitize( $val, $html=0 ) {
    if (is_array($val)) {
        foreach ($val as $k=>$v) $val[$k] = sanitize($v, $html);
        return $val;
    } else {
        $val = trim( $val );
        if (!$html) {
            $val = strip_tags($val);
            $pat = array("\r\n", "\n\r", "\n", "\r");
            $val = str_replace($pat, '<br>', $val); // newlines to <br>
            $pat = array('/^\s+/', '/\s{2,}/', '/\s+\$/');
            $rep = array('', ' ', '');
            $val = preg_replace($pat, $rep, $val); // remove multiple whitespaces
        }
        return mysql_real_escape_string($val); // escape stuff
    }
}
于 2012-07-29T09:04:11.407 に答える