SQL注入,引号和PHP

ptm*_*.io 4 php mysql sql sql-injection sanitize

我现在很困惑,想知道,如果你能为我清理一下.

在lateste Anon/Lulsec攻击之后,我正在质疑我的php/mysql安全性.

所以,我想,我怎么能保护PHP和Mysql.

问题:有人可以解释一下,在引用时处理PHP和Mysql 的最佳做法是什么?

  • 特别是在表单中,为了保护html,我需要某种htmlspecialchars,对吗?
  • PHP可以用表单进行漏洞攻击吗?是否需要任何保护?
  • 我应该使用real_escape_string 只是一个查询之前?在PHP中使用它是否错误/不好(参见sanitize_post函数)?

目前我正在使用以下功能.该函数"清理"所有$ _POST和$ _GET变量.这"安全"吗?

function sanitize_post($array) {
    global $db;
    if(is_array($array)) {
        foreach($array as $key=>$value) {
            if(is_array($array[$key])) {
                $array[$key] = sanitize_post($array[$key]);
            } elseif(is_string($array[$key])) {
                $array[$key] = $db->real_escape_string(strtr(stripslashes(trim($array[$key])), array("'" => '', '"' => '')));
            }
        }            
    } elseif(is_string($array)) {
        $array = $db->real_escape_string(strtr(stripslashes(trim($array)), array("'" => '', '"' => '')));
    }
    return $array;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用PHP 5.3.5和Mysql 5.1.54.

谢谢.

Mr *_*ver 6

mysql_real_escape_string值得你的关注.

然而,直接查询是一个泥潭,不再被视为安全的做法.您应该阅读PDO准备好的语句和绑定参数,这些参数具有引用,转义等内置的附带好处.

  • 是.准备好的声明**与占位符**传递任何不受信任的输入是当前最好的做法. (2认同)

Mik*_*ike 6

最佳做法始终是使用准备好的陈述.这使得SQL注入变得不可能.这是通过PDO或mysqli完成的.忘记所有的mysql_*函数.它们陈旧过时.