セキュリティの原則の1つは、クライアントからサーバーに渡される文字列と変数を無害化することです。 SQLインジェクションは、Webサイトをハッキングする方法の1つです。わかりやすくPHP SQLインジェクションを防ぐいくつかの関数があります:
SQLインジェクションを防ぐためのDrupal 8戦略とは何ですか?サイトをSQLインジェクションから保護するために、コントローラーのクライアントデータポストをクリーンアップするにはどうすればよいですか?
Drupal 8(Drupal 7など)は [〜#〜] pdo [〜#〜] を使用してデータベースと通信します。
PDOを使用すると、DB APIは 準備されたステートメント を利用して、特にSQLインジェクション攻撃を回避します。
実際には、これはデータベースAPIメソッドを使用する必要があることを意味します。 select
、update
、delete
メソッドを直接使用すると、すべてがパラメーター化されるため、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おそらく、この日と時代の比較に使用するのは最善ではありません。