我一直被MySQL注入困擾了很長時間,並且正在想辦法一起消除這個問題。我想出了以下希望很多人會覺得這個有用。MySQL注入解決方案
唯一我可以想到的是這個部分搜索: Jo =>通過使用類似%%語句返回「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查詢被執行。
所以我的問題是,如果任何人都可以找到任何退後,請隨時在這裏評論。
請給一個答案只,如果你認爲這是一個非常有用的解決方案並沒有大的缺點被找到,或者你認爲這是一個壞主意都在一起......
爲什麼這麼笨? – Val 2010-05-07 09:54:03
你想達到什麼目的? – newtover 2010-05-07 09:55:35
基本上對所有的mysql關鍵字進行編碼,所以當有人試圖注入像$ v =「1; DROP tbl;」這樣的語句時'$ s ='選擇*從tbl WHERE ID ='。$ v; '但是如果你編碼了所有的關鍵字,那麼將會觸發一個mysql錯誤,然後你的表是安全的。 – Val 2010-05-07 10:02:39