2013-01-24 86 views
0

我已经做了一个简单的功能,以防止从sql注入和XXS 这里是我的代码,对此的任何建议?这对于安全性来说足够好吗?PHP安全功能

function mres($input){ 
    if(get_magic_quotes_gpc()){ 
     $input=stripslashes($input);  
    } 
    $input=htmlentities($input, ENT_COMPAT, 'UTF-8'); 
    return mysql_real_escape_string($input); 
} 
+0

http://stackoverflow.com/q/4223980/285587 –

回答

2

这是错误的,至少有两种方式:

打开的 magic_quotes
  1. 完全如果你能。至少你没有使用它,但$input可能不是标量
  2. htmlentities是为显示,而不是存储。永远不要编码存储!
  3. mysql_*函数已被弃用。当您调用它时,不能保证您将有一个打开的mysql连接(必需)。

http://us3.php.net/manual/en/function.mysql-real-escape-string.php

+0

所以是没有办法解决这个功能? –

+0

@chienpinwang不,在这一点上是不可修复的。放弃它及其所有内容。开始使用'PDO'。 –

0

看你实际上在做什么:

魔术引号是一个整体的逃避所有传入的数据,它让你脆弱,因为单独逃避不会使你的数据“安全“ 以任何方式。

所以,你正在清理这些散装逃逸......然后应用同样的再度外泄:)

+0

不完全是......'mysql_real_escape_string'和'addslashes'不等价。加'htmlentities'编码将被转义的引号。 –