2

サーバーがAPIあり、すべての取得データをデータベースに入れる必要があります

データベースに接続した後にこのコードを使用します:

foreach ($_GET as $key => $value)
$_GET[$key] = mysql_real_escape_string($value);

私のコードは安全ですか?

4

2 に答える 2

8

いいえ、あなたのコードは安全ではありません! データをクエリにどのように配置するかはわかりません。これが最も重要なことです。

次のように、非常に多くの間違いを犯す可能性があります。

$sql = "INSERT INTO {$_GET[table]} ({$_GET[column]}) VALUES ('{$_GET[value]}')";

最後の値だけが安全にエスケープされ、最初の 2 つはそうではありません!

また、mysql_real_escape_string()進行中のデータベース接続のエンコード設定を評価します。以前にデータベースに接続したことがありますか? エンコーディングを設定していますか?

最後に: 本当に必要になる前にエスケープしないでください。事前にエスケープされたデータが同時に別の目的で使用される可能性があるため、時期尚早のエスケープはあらゆる種類の問題につながります。

于 2013-02-04T22:02:14.503 に答える
4

現時点ではそうです。ただし、すべてのmysql_関数は非推奨であり、PHP から削除され、サポートされなくなることに注意してください。これは、独自のセキュリティ上の危険性を示しています。

使用を検討してください

mysqli_real_escape_string

より詳しい情報

http://php.net/manual/en/function.mysql-real-escape-string.php

赤いブロックを読み、デフォルトの文字セットに関するセキュリティ コメントに注意してください。両方の機能に適用されます。

于 2013-02-04T21:45:17.080 に答える