Php 我是否需要mysqli->;过滤器url后的真实\u转义\u字符串?
我问这个问题是因为我仍然不确定filter$\u GET变量是否足以阻止mysql注入,所以首先我有一个filter函数Php 我是否需要mysqli->;过滤器url后的真实\u转义\u字符串?,php,session,get,mysqli,Php,Session,Get,Mysqli,我问这个问题是因为我仍然不确定filter$\u GET变量是否足以阻止mysql注入,所以首先我有一个filter函数 function filter_url($url) { if (is_array($url)) { foreach ($url as $key => $value) { // recurssion $url[$key] = filter_url($value); } return $url; } e
function filter_url($url)
{
if (is_array($url))
{
foreach ($url as $key => $value)
{
// recurssion
$url[$key] = filter_url($value);
}
return $url;
}
else
{
// remove everything except for a-ZA-Z0-9_.-&=
$url = preg_replace('/[^a-zA-Z0-9_\.\-&=]/', '', $url);
return $url;
}
}
我有$\u GET=filter\u url($\u GET)代码>每次我打电话之前
$filter_case =isset($_GET['product_ID'])?"and product_ID={$_GET['product_ID']}":"";
我是否需要执行$mysqli->real\u escape\u字符串($\u GET['product\u ID'])
?如果我仍然要暗示,什么样的sql注入将超越我的查询方法
除此之外,我想做的$mysqli->real\u escape\u string($\u SESSION['member\u ID'])
很重要吗?有人可以操纵他的$\u SESSION
变量吗?这是一个根本错误的问题
在SQL查询中添加字符串文字时,您需要$mysqli->real\u escape\u string
。在这种情况下,您需要此函数,而不管字符串的来源或验证是什么。在任何其他情况下(即字符串不在查询中或不作为SQL字符串),此函数将完全无用
这就是为什么必须使用准备好的语句,无论是本机语句还是模拟语句。我同意:准备好的语句是针对SQL注入的解决方案,在所有情况下都有效。现在我看到准备好的语句具有自动转义功能,我在转义时错过了它,因为它没有向下滚动到手册末尾。将我的代码更改为准备好的语句!:)