私は長い間MySQLインジェクションに悩まされており、この問題を一斉に解消する方法を考えていました。多くの人がこれが役立つことを願って、私は以下の何かを思いついた。
私が考えることができる唯一の欠点は、部分的な検索です。Jo=>like%%ステートメントを使用して"John"を返します。
これがphpソリューションです:
<?php
function safeQ(){
$search= array('delete','select');//and every keyword...
$replace= array(base64_encode('delete'),base64_encode('select'));
foreach($_REQUEST as $k=>$v){
str_replace($search, $replace, $v);
}
}
safeQ();
function html($str){
$search= array(base64_encode('delete'),base64_encode('select'));
$replace= array('delete','select');//and every keyword...
str_replace($search, $replace, $str);
}
//example 1
...
...
$result = mysql_fetch_array($query);
echo html($result[0]['field_name']);
//example 2
$select = 'SELECT * FROM $_GET['query'] ';
//example 3
$insert = 'INSERT INTO .... value( $_GET['query'] )';
?>
私はあなたがまだ他のタイプのインジェクションを使ってインジェクションできることを知っています1=1
...しかしこれはあなたの問題の半分を解決できると思うので正しいmysqlクエリが実行されます。
だから私の質問は、誰かがこれに関する欠点を見つけることができるなら、ここにコメントしてください。
これが非常に有用な解決策であり、大きな欠点が見つからないと思う場合、または一緒に悪い考えであると思う場合にのみ、答えを与えてください...