2

こんにちは

私は私のサイトでプロトタイプ段階にあります。このサイトでこの質問をした後、さらに読んだ後、私はを使用することにしmysql prepared statementsました。

私の新しい考え方では、物事を正しく理解していることを確認したいので、2つの質問は次のとおりです。

  1. 信頼できないデータをmysqlに挿入するときにプリペアドステートメントを使用する場合は、を使用する必要はありませんmysqli_real_escape_string function。私は正しいですか?

  2. mysql dbから画面にhtmlとしてデータをフェッチして表示するときにプリペアドステートメントを使用する場合(セキュリティ上の理由から)、htmlピューリファイアクラスを使用する方がよいため、htmlピュリファイアクラスを使用する必要があります。私は正しいですか?

    私の考え方を教えていただけませんか。私の方法は理にかなっていますか?

    ありがとう、BR

4

4 に答える 4

1

mysqlへの信頼できないデータ挿入中にプリペアドステートメントを使用する場合、mysqli_real_escape_string関数を使用する必要はありません。私は正しいですか?

あなたはポイントを得ました。プリペアドステートメントには、独自のエスケーププロシージャがあります。

mysql dbから画面にhtmlとしてデータをフェッチして表示するときにプリペアドステートメントを使用する場合(セキュリティ上の理由から)、htmlピューリファイアクラスを使用する方がよいため、htmlピュリファイアクラスを使用する必要があります。私は正しいですか?

あなたも正しいです。あなたがあなたのhtmlを印刷するとき、あなたはそれが安全であることを確認しなければならないので、それらは2つの解決策です:急進的なもの:everithingをエスケープするhtmlspecialcharsか、安全なhtmlタグを可能にするより柔らかいもの:using htmlpurifier

また、安全でより快適なWeb​​サイトにアクセスするためのルールを紹介してください。

プリペアドステートメントでありhtmlpurifier、「エスケープアウト」するためにここにあります。つまり、出力に理解できる方法でデータを送信します。

ルールの一部にあるフィルターを使用すると、ユーザーが入力した内容を調べることができます。良い例は日付形式です。おそらく、英語形式のYmdで日付を入力してもらいたいでしょう。彼らがあなたのウェブサイトが機能しない場合、あなたは彼らに正しい方法で日付をもう一度入力するように頼まなければなりません。フィルタリングについて覚えておくべき1つの方法があります:filter_var

于 2013-02-20T09:19:46.573 に答える
1

mysqlへの信頼できないデータ挿入中にプリペアドステートメントを使用する場合、mysqli_real_escape_string関数を使用する必要はありません。私は正しいですか?

正しい

mysql dbから画面にhtmlとしてデータをフェッチして表示するときにプリペアドステートメントを使用する場合(セキュリティ上の理由から)、htmlピューリファイアクラスを使用する方がよいため、htmlピュリファイアクラスを使用する必要があります。私は正しいですか?

プリペアドステートメントを使用すると、データベースがSQLインジェクションから保護されます。XSS攻撃には何もしません。それらに対する何らかの防御が必要です。

「データベースの保護」と「HTMLの保護」は完全に別の問題であるため、一方のソリューションの選択は、もう一方のソリューションの選択とは関係ありません。

実際のHTMLパーサー(HTMLピューリファイヤーはその1つだと思います)を中心に構築されたホワイトリストベースのフィルターを使用することは、適切な選択です(HTMLを許可する場合)。

于 2013-02-20T09:20:19.663 に答える
1

はい、そうです。
mysqli_real_escape_string 関数は、とにかく保護とは何の関係もありません。html purifier は良いことですが、ユーザー入力に HTML が期待されない場合は、遅延関数呼び出しに
置き換えることができます。htmlspecialchars()

準備されたステートメントについて言及する唯一のことは、基本的なスカラー値のみをカバーし、識別子 (テーブルとフィールドの名前) や配列などの複雑な値に対しては役に立たないことです。

于 2013-02-20T09:16:47.153 に答える
1

1) 準備済みステートメントを使用してデータを挿入する場合、その中の引用符やその他の特殊文字をエスケープする必要はありません。基本的に、SQL インジェクションから保護されます。ただし、XSS 攻撃が含まれないようにデータをサニタイズする必要があります。HTML Purifier を調べているので、これは正しい方向に進んでいます。また、ビジネス ロジック コードを記述してデータを検証し、実際に期待どおりであることを確認する必要があります (型チェック、範囲チェックなど)。

2)理論的には、ユーザーに表示する前にデータをサニタイズする必要があり、HTML purifier はこのタスクを実行できます。ただし、実際には、HTML purifier はかなり重いライブラリであるため、データが表示されるたびに使用するのには適していないことに気付くでしょう。より優れたソリューションは、データベースに挿入される前にデータに対して HTML purifier を実行し、追加の検証なしで表示することです。基本的に、データベースがクリーンであることを確認しようとしています。データベースがクリーンであれば、そこから来るものも間違いなくクリーンになるからです。これは、一般的なセキュリティの良いアプローチでもあります。

検証手順は次のようになります。

if( ! isValid( $rawData ) ) {
    return;
}
$purifiedData = htmlPurifier( $rawData );
mysql_prepared_insert( $purifiedData );

もちろん、これは 1 つの方法にすぎません。優れたセキュリティとデータのサニタイズには、多くのアプローチがあります。また、HTML Purifier を使用する理由を理解することも重要です。ユーザーがすべてではなく一部のHTML タグを投稿できるようにする場合は、これを使用する必要があります。すべてのHTMLをブロックしたい場合、このhtmlspecialchars関数ははるかに効率的な方法でそのトリックを行います。HTML purifier は、タグのホワイトリストを許可してその他すべてをブロックする場合に適しています。また、これを使用して、すべてのタグをエスケープするのではなく削除することもできます。したがって、テキストが通過した後よりもわずかに見栄えが良くなりますhtmlspecialchars

于 2013-02-20T09:33:02.467 に答える