我已经被 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'] )';
?>
我知道,我知道您仍然可以注入 using1=1
或任何其他类型的注入...但是我认为这可以解决您的一半问题,因此执行正确的 mysql 查询。
所以我的问题是,如果有人能找到任何缺点,请随时在这里发表评论。
请仅在您认为这是一个非常有用的解决方案并且没有发现主要缺点或您认为这是一个坏主意时才给出答案......