Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我还应该做什么来清理用户输入?_Php_Mysql_Security - Fatal编程技术网

Php 我还应该做什么来清理用户输入?

Php 我还应该做什么来清理用户输入?,php,mysql,security,Php,Mysql,Security,最近,我的一个客户对我的一些网站进行了审计。他们带来的一件事是,我可以更好地清理输入数据,因为人们仍然可能对数据库造成潜在危害 下面的函数是我目前正在使用的(老开发人员遗留下来的),但我看不出潜在的问题在哪里 传递到数据库的字符串将通过XML显示,而XML又由Flash应用程序读取 谁能告诉我我可能遗漏了什么?谢谢 function secure_string($string) { return (strip_tags(addslashes(mysql_real_escape_st

最近,我的一个客户对我的一些网站进行了审计。他们带来的一件事是,我可以更好地清理输入数据,因为人们仍然可能对数据库造成潜在危害

下面的函数是我目前正在使用的(老开发人员遗留下来的),但我看不出潜在的问题在哪里

传递到数据库的字符串将通过XML显示,而XML又由Flash应用程序读取

谁能告诉我我可能遗漏了什么?谢谢

function secure_string($string)
{   
    return (strip_tags(addslashes(mysql_real_escape_string(
                      stripslashes($string)))));
}

看起来在这个函数中发生了太多的事情
mysql\u real\u escape\u string()
已经转义了您需要转义的所有内容,因此无需对其运行
addslashes()
。事实上,它可以通过逃逸反斜杠
mysql\u real\u escape\u string()
创建的字符串来弊大于利。

取决于“安全”字符串的使用位置。如果要在数据库中使用它,您只需要
mysql\u real\u escape\u string()
,就可以了。如果要以html格式显示,您只需要,仅此而已。简而言之:你的代码做得太多了,甚至可能是有害的


如果要将其存储在数据库中,以便以后以html格式显示(例如,如注释),则在存储字符串时应使用
mysql\u real\u escape\u string()
,在显示字符串时应使用
htmlentities()

mysql\u real\u escape\u string
是最后一步,您不应该在应用程序逻辑中使用它。它的唯一用途是将字符串传递给数据库,因此仅在构造查询时使用它。您可以将任何内容传递给
mysql\u real\u escape\u string
,它将确保您可以安全地将其存储在数据库中


至于其余的,这取决于你想要什么。如果要去除标签,请使用
去除标签
,等等。

最好使用新的PHP函数来清除输入。新的和更好的。

如果您的服务器使用PHP5.2或更高版本,您应该将其用于XML部分

$output = filter_var($input, FILTER_SANITIZE_STRING);

若要将某些内容存储到数据库中,请使用和参数化查询。

在输入时尝试解决问题是一种用词不当的做法,因为问题发生在输出时。在这里看到我的答案:


显示您需要该字符串的用途,而不是当前函数。保护取决于您想要防范的内容。@scragar,MySQL注入。至少他说客户说:“对数据库的潜在危害”。我不再做php了,但是,老实说,在一个链中调用
addslashes
stripslashes
肯定会让我大吃一惊。字符串被输出到一个xml文件,然后由flash应用程序读取。感谢如果要将其添加到XML文件中,则在将其添加到XML文件时应将其转义为XML。在这里,您要处理的是将字符串添加到数据库中,因此要将其转义到数据库中。您需要为不同的目的使用不同的验证/转义函数。谢谢!当我抽离时,我不必担心精神是否健全!:)提示一下,有一个类似mysql\u real\u escape\u string()的函数,但用于postgresql?pg_escape_string或pg_escape_bytea似乎对注入不起作用
pg_escape_string
怎么不起作用?它应该很好用
pg_query_params
是运行查询的更好方法。