如何检查此php代码中的sql注入?

如何检查此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 ("

我如何检查这是否为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
                (" . 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
将只接受/转换整数,我不认为这是一个漏洞。@Alix
mysql\u real\u escape\u string()
仅转义引号字符。它不会清理
1这样的值;(这里的SQL代码)
这将在查询中执行是的,我忘记了
mysql\u real\u escape\u string()
不会像
PDO::quote()
那样添加引号。+1,但是如果数据库模式具有最低限度的良好设计,
blog\u id
将只接受/转换整数,我不认为这是一个漏洞。@Alix
mysql\u real\u escape\u string()
仅转义引号字符。它不会清理
1这样的值;(这里是SQL代码)
这将在查询中执行。是的,我忘记了
mysql\u real\u escape\u string()
不像
PDO::quote()
那样添加引号。