mysql_real_escape_string() と mysql_escape_string() はアプリケーションにとって十分に安全ですか?
概要:
アプリのセキュリティを維持することは非常に重要であり、データベースのセキュリティも重要な役割を果たします。 mysql_real_escape_string() と mysql_escape_string() は SQL インジェクションから保護するために一般的に使用されますが、その有効性について懸念が生じます。
質問:
Will mysql_real_escape_string()アプリのセキュリティには mysql_escape_string() で十分ですか?
答え:
いいえ、
脆弱性mysql_real_escape_string() と mysql_escape_string() の
これらの関数は、いくつかのセキュリティの抜け穴があるため、包括的なアプリのセキュリティには不十分です:
SQL インジェクション:
例:
$sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);
このクエリは次のようになります。悪意のあるデータを挿入することで悪用され、不正なデータベース アクセスにつながる可能性があります。
LIKE SQL 攻撃:
例:
$sql = "SELECT url FROM GrabbedURLs WHERE " . mysql_real_escape_string($field) . " LIKE '%s%%' LIMIT %s";
このクエリにより、攻撃者はすべてのレコードを取得できます。
文字セットの悪用:
推奨される解決策: プリペアド ステートメント
これらの脆弱性に対処するために推奨されるセキュリティ対策は、プリペアド ステートメントを採用することです。
例:
$pdo = new PDO($dsn); $column = 'url'; $value = 'http://www.stackoverflow.com/'; $limit = 1; $statement = $pdo->prepare('SELECT url FROM GrabbedURLs WHERE ' . $column . '=? LIMIT ' . $limit); $statement->execute(array($value)); while (($data = $statement->fetch())) { }
結論:
mysql_real_escape_string() および mysql_escape_string() は、特定のものに対して限定的な保護を提供しますSQL インジェクション攻撃。ただし、他のさまざまな脆弱性からアプリケーションを保護するには不十分です。推奨されるアプローチは、準備されたステートメントを使用してアプリの包括的なセキュリティを確保することです。
以上がmysql_real_escape_string() と mysql_escape_string() はアプリのセキュリティに十分ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。