-1

リクエストをクリーンアップするためのさまざまな方法をすべて理解することはできないGETので、助けを求めようと思いました。

$view=$_GET['view'];

if($view){
$result = mysql_query('SELECT * FROM main WHERE category = "'.$view.'"', $main);
}

ここにセキュリティ上の懸念はありますか?文字列を挿入しようとする例を検索しようとしましたが、機能するものは見つかりませんでした。

preg_match文字と数字のみでa を使用することを考えていましたが、必要かどうかさえわかりませんでした。

答えを知りたいのと同じくらい、私を助けるために見るべきバックグラウンドの読書はありますか? さまざまな状況で弦をきれいにするさまざまなシナリオと方法が非常に多いため、すべてを理解するのに苦労しています.

4

3 に答える 3

1

これを試して:

?view=derp" OR SLEEP(10000000) = "問題?

これに対する十分なリクエストとあなたのサイトは DoS です。

それを回避する最善の方法はmysql_real_escape_string、を使用するか、PDO などの最新のものに更新することです。

于 2013-06-19T16:08:52.480 に答える
1

ここにセキュリティ上の懸念はありますか?

はい、SQL インジェクションの脆弱性があります。

クエリを保護するには、PDO または MySQLi の使用を検討し、準備済みステートメントを使用する必要があります。準備されたステートメントは、変数のエスケープまたは検証よりもはるかに安全です。準備されたステートメントはクエリに変数を挿入することはありません。代わりに、変数 (またはパラメーター) は MySQL サーバーによって個別に処理されるため、SQL インジェクションの可能性はありません。

これは、バックグラウンドを持つ開発者を対象とした優れた PDO チュートリアルmysql_*であり、準備されたステートメントの例がいくつか含まれています。

クエリで機能する SQL インジェクションの例:

script.php?view='' または 1

これにより、コードがテーブルからすべての行を取得するようにだまされてしまいますtrue。クエリは次のようになります。

SELECT * FROM メイン WHERE カテゴリ = '' OR 1

于 2013-06-19T16:09:05.230 に答える
0

mysqli または PDO を使用して準備済みステートメントを使用するように切り替える必要があります。これにより、セキュリティの問題が修正されます。さらに、mysql_ 関数は廃止され、削除されます。

于 2013-06-19T16:08:10.973 に答える