如何检查此php代码中的sql注入?
我如何检查这是否为Vulnuable如何检查此php代码中的sql注入?,php,mysql,Php,Mysql,我如何检查这是否为Vulnuable function clean($str){ return mysql_real_escape_string(stripcslashes(strip_tags(htmlspecialchars($str)))); } if($_POST['submit']) { $sql = "INSERT INTO comments(blog_id, dateposted, name, comment) VALUES ("
function clean($str){
return mysql_real_escape_string(stripcslashes(strip_tags(htmlspecialchars($str))));
}
if($_POST['submit']) {
$sql = "INSERT INTO comments(blog_id, dateposted, name, comment) VALUES
(" . clean($validentry) . "
, NOW()
, '" . clean($_POST['name']) . "'
, '" . clean($_POST['comment']) . "'
);";
mysql_query($sql);
您需要使用
is\u int()
检查blog\u id
——因为它没有用引号括起来,mysql\u real\u escape\u string()
将无法对其进行清理。这显然是一个弱点
除此之外,您的代码看起来很安全,但它进行了许多不必要的清理
mysql\u real\u escape\u string()
其他呼叫在该星座中不是必需的;strip_tags
或htmlspecialchars()
都可以防止XSS攻击。然而,将不安全的原始HTML存储在数据库中,并在输出时对其进行清理,这被认为是更好的做法
stripcslashes
调用可以完全清除 您需要使用is_int()
检查博客id
——因为它没有用引号括起来,mysql\u real\u escape\u string()
将无法对其进行清理。这显然是一个弱点
除此之外,您的代码看起来很安全,但它进行了许多不必要的清理
mysql\u real\u escape\u string()
其他呼叫在该星座中不是必需的;strip_tags
或htmlspecialchars()
都可以防止XSS攻击。然而,将不安全的原始HTML存储在数据库中,并在输出时对其进行清理,这被认为是更好的做法
stripcslashes
调用可以完全清除 只是出于好奇,你自己编写了这个函数吗?我这样问是因为我一直看到clean()
和makeAllSecure()
函数,每一个都比前一个更糟糕
为了防止SQL注入,您只需要使用mysql\u real\u escape\u string()
,或类似工具
您的stripcslashes()
也是不必要的,您可能想调用stripcslashes()
来代替iff(如当且仅当)magic\u quotes
是上的并且$str
是用户提供的变量,如果iff产生true,则应该只发生一次,通常在脚本的开头
关于strip_标记(htmlspecialchars($str))
-它只具有将'
、“
、
转换为它们的HTML实体标记的效果,不会剥离任何标记…如果您真的还想剥离标记,您正在寻找的是以下内容:
htmlspecialchars(strip_tags($str))
但是这种清理应该在您输出HTML内容时发生,而不是在数据库中保存时发生。只是出于好奇,您是否自己编写了该函数?我之所以这样问,是因为我一直看到clean()
和makeAllSecure()
函数,每一个函数都比前一个更糟糕
为了防止SQL注入,您只需要使用mysql\u real\u escape\u string()
,或类似工具
您的stripcslashes()
也是不必要的,您可能需要调用stripcslashes()
来代替iff(如中的当且仅当)magic_quotes
是开启的
并且$str
是用户提供的变量,如果iff生成true,则该应该只发生一次,通常在脚本开始时发生
关于strip_标记(htmlspecialchars($str))
-它只具有将'
、“
、
转换为其HTML实体符号的效果,不会剥离任何标记。。。如果您真的想去除标签,您需要的是以下内容:
htmlspecialchars(strip_tags($str))
但是这种清理应该在您输出HTML内容时发生,而不是在数据库中保存时发生。使用这些函数过滤查询:
例如:此查询,如果不使用下面的功能,则无法进行筛选
参数类型值
f得到-1或17-7=10
function clean($str){
if(ereg('^[A-Za-z0-9]+$',$str)){
$str=mysql_real_escape_string($str);
return($str);
}else{
exit();
}
}
使用这些功能进行过滤查询:
例如:此查询,如果不使用下面的功能,则无法进行筛选
参数类型值
f得到-1或17-7=10
function clean($str){
if(ereg('^[A-Za-z0-9]+$',$str)){
$str=mysql_real_escape_string($str);
return($str);
}else{
exit();
}
}
+1,但如果数据库架构具有最低限度的良好设计,blog\u id
将只接受/转换整数,我不认为这是一个漏洞。@Alixmysql\u real\u escape\u string()
仅转义引号字符。它不会清理1这样的值;(这里的SQL代码)
这将在查询中执行是的,我忘记了mysql\u real\u escape\u string()
不会像PDO::quote()
那样添加引号。+1,但是如果数据库模式具有最低限度的良好设计,blog\u id
将只接受/转换整数,我不认为这是一个漏洞。@Alixmysql\u real\u escape\u string()
仅转义引号字符。它不会清理1这样的值;(这里是SQL代码)
这将在查询中执行。是的,我忘记了mysql\u real\u escape\u string()
不像PDO::quote()
那样添加引号。