Php 自动插入mysql\u real\u escape\u字符串
免责声明:我知道这些函数位于待办事项列表的顶部。所有的警告都只是向唱诗班宣讲而已 无论如何。我发现自己受雇于一家使用mysql_*功能的公司。这还不够糟糕,因为整个东西都没有Php 自动插入mysql\u real\u escape\u字符串,php,mysql,mysql-real-escape-string,Php,Mysql,Mysql Real Escape String,免责声明:我知道这些函数位于待办事项列表的顶部。所有的警告都只是向唱诗班宣讲而已 无论如何。我发现自己受雇于一家使用mysql_*功能的公司。这还不够糟糕,因为整个东西都没有mysql\u real\u escape\u string()“太棒了”。所有的用户输入都是不受监控的,所以作为新的代码猴子,我的工作就是将其合并到所有4.93g的php脚本中。F.M.L.“那么,”我心里想,“如果我只是在每个页面上取消设置$\u请求数组(不知道为什么,但他们从来没有使用$\u POST或$\u GET,
mysql\u real\u escape\u string()
“太棒了”。所有的用户输入都是不受监控的,所以作为新的代码猴子,我的工作就是将其合并到所有4.93g的php脚本中。F.M.L.“那么,”我心里想,“如果我只是在每个页面上取消设置$\u请求
数组(不知道为什么,但他们从来没有使用$\u POST
或$\u GET
,在整个程序中,他们在任何地方都使用$\u请求
),然后用mysql\u real\u escape\u字符串
重置它会怎么样?”。对我来说,这肯定比通过100000000行代码要好所以我坐下来写了函数来实现它。以下是我的地址:
/*lets say input is dirty and input2 is boy*/
echo "<br><pre>";print_r($_REQUEST);echo "</pre><br>";
$tempString = implode(',', $_REQUEST);
$tempString2 = implode(',', array_keys($_REQUEST));
$tempArray = explode(',', $tempString);
$tempArray2 = explode(',', $tempString2);
$count = count($_REQUEST);
echo "<br><pre>";print_r($tempArray);echo "</pre><br>";
echo "<br>";
echo "<br><pre>";print_r($tempArray2);echo "</pre><br>";
unset($_REQUEST);
$_REQUEST = array();
for($i = 0; $i < $count; $i++){
$_REQUEST[$tempArray2[$i]] = "mysql_real_escape_string(".$tempArray[$i].")";
}
echo "<br><pre>";print_r($_REQUEST);echo "</pre><br>";
但坦率地说,这似乎太容易了。我看到的紧迫问题是
$\u请求[]
我想我把这个带到这里来是为了,第二双眼睛。你认为这有什么直接的问题吗?还有其他我错过的即时问题吗?如果你们喜欢这样,不管怎样,因为我相信还有其他人可以使用这样的东西(如果你构建了它,他们会来的),我会在github上浏览它,并将其应用到我的shcedule中,谢谢:)首先,你目前所做的一切毫无意义。您实际上是在用户输入周围包装单词
mysql\u real\u escape\u string(…)
,这完全没有意义。它不能防止SQL注入,这意味着单词mysql\u real\u escape\u string
将显示在您的输入中
如果您在所有用户输入上调用mysql\u real\u escape\u string()
,您将得到一个不完美的magic\u quotes
,以及由此产生的所有问题。特别是,这意味着任何不直接将用户输入传递给SQL的代码(或者适当地使用mysql\u real\u escape\u string
本身!)最终都会显示SQL转义文本(例如,\'
)
除了实际检查代码并重新编写代码以适当地避开用户输入之外,没有其他真正的替代方法。但是,如果您真的有4.93GB的PHP可供使用,那么其他一些东西就大错特错了——任何应用程序都不应该那么大。这种大小的代码库是完全不可能维护的,您最好从头开始(或者找一份新工作)。不应该自动插入mysql\u real\u escape\u字符串。时期
仅仅因为“用mysql\u real\u escape\u string重置数据”不是“保护数据不受SQL注入”的同义词
实际上,您要做的只是重新体现长期以来被鄙视、不推荐和已经删除的功能。试着想想原因。
原因是单序列转义是SQL注入的可靠方法 只有一个音符 mysql函数,即mysql\u real\u escape\u字符串 这句话不正确。
这个诚实的函数没有问题。
程序员不正确地使用它,对任何错误都负有责任。所以您正在寻找一种
magic\u quotes
替代方案,利用m\u r\u e\u s
?您提出的代码非常糟糕,考虑递归函数遍历每个输入数组。除了请求之外,这还可以解决覆盖$\u GET和$\u POST的问题。尝试4.93 GB未初始化的PHP;“你还是选择不重写它?”食梦者:这不是我的选择。我写了一篇4页的论文,阐述了为什么需要重写。最后我不付账单了……我真的怀疑你能自动摆脱这一困境。任何组织如果鲁莽地塞进$\u请求
数据而不假思索,都会做出各种假设,认为宏替换或函数包装只是垃圾。你应该用审核这个应用程序,看看这个代码有多糟糕。@tadman如果我搜索每个页面并替换页面中的所有变量,我会同意你的。但是,当我撕开用户的输入,只是重建它,它非常感动脚本。我甚至没有考虑魔术引文,虽然从来没有使用它之前,我知道足够的,不想去那个盟友。我确实有一个工作面试,那是一个该死的工作。在那之前,我将半放弃这个想法,更加努力地推动PDO
Array
(
[input] => dirty
[input2] => boy
)
Array
(
[0] => dirty
[1] => boy
)
Array
(
[0] => input
[1] => input2
)
Array
(
[input] => mysql_real_escape_string(dirty)
[input2] => mysql_real_escape_string(boy)
)