1

データを入力するときとデータを出力するときのさまざまなケースで、どの関数を使用するのが最適かを理解しようとしています。

ユーザーが MySQL にデータを入力できるようにした場合、データを保護して SQL インジェクションや他の種類のインジェクションやハッキングを防ぐ最善の方法は何ですか?

データベースから通常の html としてデータを出力する場合、スクリプトなどを実行できないようにする最善の方法は何ですか?

現時点では基本的にしか使っていません

mysql_real_escape_string(); 

データベースにデータを入力する前に、これはうまくいくようですが、これで十分なのか、それとも他の方法が良いのか知りたいです。

そして、現時点で私が使用している

stripslashes(nl2br(htmlentities())) 

(とにかくほとんどの場合)データを出力するため。これらは私が通常使用する用途には問題なく機能しますが、htmlentities で問題が発生したため、いくつかの html タグをそれぞれ出力できるようにしたいと考えています。次に例を示します。

<ul></ul><li></li><bold></bold> 

などですが、できません。

どんな助けでも素晴らしいでしょう、ありがとう。

4

3 に答える 3

1

これは、今日最も問題のあるタスクの1つです:)

SQLインジェクションやその他の攻撃者の方法がどのように機能するかを知る必要があります。https://www.owasp.org/index.php/Main_Pageには、各メソッドの非常に詳細な説明と、PHPのセキュリティフレームワーク全体があります。

CodeIgniterやZendのように、特定のフレームワークの特定のセキュリティライブラリを使用することもお勧めします。

次に、可能な限りREGEXPを使用し、パターンルールを特定の入力形式に固定します。

フレームワークのプリペアドステートメントまたはアクティブレコードクラスを使用します。

(int)$_GET['myvar']本当に数値が必要な場合は、常に入力をキャストしてください。

アプリケーションを保護するためのルールや方法は他にもたくさんありますが、1つの黄金のルールは「ユーザーの入力を絶対に信用しない」ことです。

于 2012-08-10T00:28:05.037 に答える
0

php構成では、オフにする必要がありますmagic_quotes_gpc。したがって、必要はありませんstripslashes

SQL については、PDO のプリペアド ステートメントをご覧ください。

また、カスタム タグについては、3 つしかないため、 のpreg_replace呼び出しの後に呼び出しをhtmlentities実行して、データベースに挿入する前にそれらを元に戻すことができます。

于 2012-08-10T00:07:09.633 に答える