Drupal 7メソッドdb_insertを使用して、Drupalデータベースのカスタムテーブルにデータを挿入します。これが推奨される方法であることを読んでください。ただし、コードとdocoをウォークスルーしたため、値を解析する場所が見つからないか、これらの値が安全であることがわかります。
一部の値はユーザーから取得されているため、SQLインジェクション攻撃をチェックする必要があります。
これは私が読んでいた例であり、Drupal 6は値を解析し、drupal 7バージョンは解析しません。
<?php
// Drupal 6 version
db_query('INSERT INTO {vchess_games}
(gid, timestamps, white, black, state, board_white, board_black) ' . "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')",
$gid, $timestamps, $game['white'], $game['black'], $state, $board_white, $board_black);
// Drupal 7 version
db_insert('vchess_games')
->fields(array(
'gid' => $gid,
'timestamps' => $timestamps,
'white' => $game['white'],
'black' => $game['black'],
'state' => $state,
'board_white' => $board_white,
'board_black' => $board_black
))
->execute();
?>
Drupalデータベースレイヤーは [〜#〜] pdo [〜#〜] でラップし、準備済みステートメントを使用するため、はい、挿入ステートメントはサニタイズされ、SQLから保護されますインジェクション攻撃。
Prepared Statements docsからのこの引用は、それを最もよく示しています:
準備済みステートメントのパラメーターは引用符で囲む必要はありません。ドライバはこれを自動的に処理します。アプリケーションが準備済みステートメントのみを使用する場合、開発者はSQLインジェクションが発生しないことを確認できます(ただし、クエリの他の部分がエスケープされていない入力で構築されている場合でも、SQLインジェクションは可能です)。
同じことがDrupal 7(_db_select
_、_db_delete
_など)のすべてのデータベース関数に当てはまります。まだ安全でない可能性があるのはdb_query()
は、渡した任意の文字列を実行しますが、db_query()
を使用しても、クエリを安全にするためにパラメータを渡すことができます。
データベースアブストラクションレイヤー のドキュメントには、さらに詳しい情報があります。