我最近在一个论坛上看到了一篇文章,在论坛上,有人问到在进入数据库之前,如何实现对$_GET、$_POST等超级全球化的全球环境保护。
你们觉得这个方法怎么样,因为我正在考虑实施这个方法,因为有一段时间我可能会忘记做适当的卫生设施。
在创建自己的类之前,我也在寻找一个免费的类,但我找到的是针对PHP3.0的。
array_walk_recursive会为我做这项工作吗?
发布于 2011-02-09 04:56:04
实际上在php中已经构建了一个叫做magic_quotes_gpc的php功能来做这件事。如果您在php.ini中将magic_quotes_gpc设置为on,它将为您完成此操作。然而,由于很多原因(参见this blog post上的一个人写的利弊),这被发现是一个糟糕的想法,每个人都关闭了它,并在使用数据库抽象层进行所有数据库查询时重新引用了一些东西。想想PDO吧。既然你不知道添加额外的引号会对你有什么帮助或坏处,你可以直接打开magic_quotes_gpc,但我不建议这样做。如果代码库需要维护,请以正确的方式进行维护,并开始使用PDO将原始sql提取到调用中。
发布于 2011-02-09 04:56:05
在实际使用数据之前,不要接触超全局变量。例如……您不知道是要插入到数据库中,还是要输出到HTML页面中,还是要构建一些Javascript,或者其他什么。
一旦你开始摆弄超全局变量的内容,你就会失去它们作为“原始”数据的来源,并开始不得不撤销之前所做的工作。这就是为什么PHP的表单数据自动转义不是一个好主意的原因之一-它假设您纯粹是在处理数据库,并且永远不需要将数据发送到其他地方:数据库转义不同于html转义不同于javascript转义不同于...等等。
同样,如果您正在构建一个模块或库以便在其他地方重用,您不能假设您对超全局变量所做的任何更改都不会破坏其他库中的内容。
发布于 2011-02-09 05:07:54
如果你开始在超级全局中胡闹,你会在某一时刻遇到麻烦。例如,如果您确实希望将这段JavaScript存储在数据库中,该怎么办?
就我个人而言,我认为用户输入清理不是一个好主意。这通常意味着要么丢弃数据,要么用一大堆转义字符或XML/HTML字符实体污染数据库。这只是一种糟糕的数据处理方式。
那么,我们试图通过清理用户输入来避免哪些问题呢?SQL注入?使用参数化查询并使用它。但是代码注入呢?很简单:清理你的输出!对来自数据库(或任何其他源)的用户数据应用htmlspecialchars() (也许还有其他一些类似的函数),您就解决了这个问题,同时仍然保持了原始数据的完整性。额外的好处是,您可以随时调整您的卫生流程,并从中受益,不仅适用于输入的新数据,也适用于所有现有数据。
https://stackoverflow.com/questions/4938246
复制相似问题