-1

と の使用はhtmlspecialchar、SQL インジェクションや XSS ベースの攻撃からの保護mysql_real_escape_stringに十分ですか?str_replace

フォーラム サイト用のソフトウェアを作成しています。そのために、自分のサイトを保護したいと考えています。PDO文を作るのが苦手で、上記のライブラリ関数を使いたい。

一重引用符と二重引用符を使用するhtmlspecialcharと、大なり記号、小なり記号、アンパサンド記号がエンコードされ、XSS 攻撃を防ぐことができます。そして、それらを元の形式にデコードしません。

次に、mysql_real_escape_stringSQL インジェクションの最初の順序を防ぎます。

3 番目に、trim両端から空白を削除します (これはオプションの場合があります)。

最後に、str_replaceコードを介して入力されたすべてのテーブル名とデータベース名を別の名前に置き換えた場合、安全でしょうか?

例: データベース名ABCと テーブル名があるとしますXYZ。今、誰かがこのステートメントを使用しています:

statement = "SELECT * FROM XYZ WHERE name = '" + userName + "';"

                          OR
SELECT * FROM XYZ WHERE name = '' OR '1'='1' -- ';

                          OR

a';DROP TABLE XYZ; SELECT * FROM userinfo WHERE 't' = 't

XYZここで、テーブル名をDEF使用するに置き換えるstr_replaceと、そのようなテーブル名がないため、コードは効果がないと思います。

のような SQL インジェクション

1 OR 1=1, I Will Also str_replace \1\.

私は、、、そしてデータベースに対する特権のみを持ち、これらすべての言葉もUPDATE私が所有します。INSERTSELECTDELETEstr_replace

[私の間違った英語を許してください。]

4

1 に答える 1

4

いいえ、それだけでは十分ではありません。XSS は、< または > 記号なしで、属性で発生する可能性があります。

また、ヘッダー インジェクションに対して脆弱になります (たとえば、電子メールを送信している場合)。

テーブル名を置き換えるのはまったく間違っています。

データベースに送信されるすべてのデータをエスケープし、文字列ではなく数値を期待している場合は、数値を渡していることを確認します (数値にキャストします)。

すべての出力をエスケープします。ただし、属性で動的データを使用している場合は、HTMLPurifier を使用して HTML をクリアすることをお勧めします。

ファイルのアップロードがある場合は、それらを保護します。ユーザーが実行可能ファイルをアップロードできず、ファイルを上書きできないことを確認してください。$_FILES['name'] プロパティを信頼しない

電子メールを送信する場合は、ヘッダー インジェクションに注意してください。

そして何よりも、実績のあるフレームワークを使用するだけです。PDO 機能とエスケープを提供できます。

于 2013-06-28T07:23:15.587 に答える