ほとんどの人がこれに眉をひそめることは知っていますが、PDO ステートメントとエスケープ文字列について知る前は、mysql インジェクションをどのように防ぐべきかわかりませんでした。
テキストを取得してフィルターを通過させる関数を作成しました。それが本当にSQLインジェクションを防ぐのか、それとも回避できるのか疑問に思っていますか? 当時の私の目標は、ユーザーがテキストを入力し、入力したとおりに表示できるようにすることでした。
これに加えて、ユーザーがデータベースに対して必要以上のアクセス許可を持っていないことを確認することにも注意を払いました。入力を使用して新しい行などを更新または挿入していたかどうか。しかし、まだ機能していなかったら?:
function filterInput($textToFilter)
{
if ($textToFilter != null)
{
//a = a
//e = e
//i = i
//o = o
//u = u
//A = A
//E = E
//I = I
//O = O
//U = U
$textToFilter = str_ireplace('insert','insert',$textToFilter);
$textToFilter = str_ireplace('select','select',$textToFilter);
$textToFilter = str_ireplace('values','values',$textToFilter);
$textToFilter = str_ireplace('where','where',$textToFilter);
$textToFilter = str_ireplace('order','order',$textToFilter);
$textToFilter = str_ireplace('into','into',$textToFilter);
$textToFilter = str_ireplace('drop','drop',$textToFilter);
$textToFilter = str_ireplace('delete','delete',$textToFilter);
$textToFilter = str_ireplace('update','update',$textToFilter);
$textToFilter = str_ireplace('set','set',$textToFilter);
$textToFilter = str_ireplace('flush','flush',$textToFilter);
$textToFilter = str_ireplace("'","'",$textToFilter);
$textToFilter = str_ireplace('"',""",$textToFilter);
$textToFilter = str_ireplace(';',";",$textToFilter);
$textToFilter = str_ireplace('>',"›",$textToFilter);
$textToFilter = str_ireplace('<',"‹",$textToFilter);
$textToFilter = nl2br($textToFilter);
$filterInputOutput = $textToFilter;
return $filterInputOutput;
}
}