web-dev-qa-db-ja.com

SQLインジェクションを防ぐ

セキュリティの原則の1つは、クライアントからサーバーに渡される文字列と変数を無害化することです。 SQLインジェクションは、Webサイトをハッキングする方法の1つです。わかりやすくPHP SQLインジェクションを防ぐいくつかの関数があります:

SQLインジェクションを防ぐためのDrupal 8戦略とは何ですか?サイトをSQLインジェクションから保護するために、コントローラーのクライアントデータポストをクリーンアップするにはどうすればよいですか?

5
Yusef

Drupal 8(Drupal 7など)は [〜#〜] pdo [〜#〜] を使用してデータベースと通信します。

PDOを使用すると、DB APIは 準備されたステートメント を利用して、特にSQLインジェクション攻撃を回避します。

実際には、これはデータベースAPIメソッドを使用する必要があることを意味します。 selectupdatedeleteメソッドを直接使用すると、すべてがパラメーター化されるため、SQLインジェクションを回避できる可能性が高くなります。

queryを使用する場合は、APIで保護できる範囲が限られているため、注意が必要です。たとえば、次のようにした場合:

$sql = "SELECT uid FROM users WHERE name = '$_GET[name]'";
\Drupal::database->query($sql);

それからあなたはあなたが得るものに値する:)あなたはいつも代わりにこれを使うべきです:

$sql = "SELECT uid FROM users WHERE name = :name";
\Drupal::database->query($sql, [':name' => $_GET['name']]);

余談ですが、実際には、あなたが言及した2つの関数が非常に古く、実際には時代遅れのコードで最近使用されているのがわかります。 MySQL拡張機能は削除され、stripslashesは従来、PHP 5.3で廃止予定だったマジッククオートで使用されていました。SQLインジェクションは依然として非常に問題ですが、これら2おそらく、この日と時代の比較に使用するのは最善ではありません。

15
Clive