0

私は通常、SQL インジェクションを防ぐためにクエリ内に値を追加する前に、独自の関数を使用して入力をクリーンアップします。pear DB_DataObject も使用します。

DB_DataObject が入力自体を消去することをどこかで読みました。これは本当ですか?クリーンアップされていない入力を DB_DataObject オブジェクトに割り当てることはできますか? (mysql_real_escape_stringはどうですか?DBとの接続がまだ確立されていないため、DB_DataObjectと組み合わせて使用​​ するとエラーが発生します)

また、他の人がどのように入力をきれいにするのか興味があります。ベストプラクティスはありますか?

4

1 に答える 1

1

DB_DataObject は、"->set*" メソッドで渡された入力をサニタイズします。

User が DB_DataObject であると仮定すると、以下はすべて安全です。

 
$user = new User;
$user->firstName = $_REQUEST['first'];
$user->setFirstName($_REQUEST['first'];
$user->setFrom($_REQUEST);

SQL のフラグメントで実際に渡すメソッドは、次のように安全ではありません。


$user->selectAs($_REQUEST['col']. ', first as name');
$user->whereAdd("first=$_REQUEST['first]");

物事が少し明確になることを願っています...

于 2009-10-11T03:35:06.527 に答える