0

不要成为一个偏执狂,我想知道是否直接将客户端输入与字符串操作函数(如explode()、strpos()、substr()……)一起使用可能是一个安全问题。

两年前,我记得读到其中一些函数使用了一个对特定条目敏感的库,并且它可用于创建新文件等......

我找不到关于OWSAP中提到的任何内容

如果是这样,哪个版本的 PHP 受此影响?

编辑 我还没有找到确切的答案,但是这个 stakeoveflow 问题与我的 问题很接近

4

4 回答 4

2

我做了几年 PHP 开发,并让关心安全的人审查了我的代码,我还没有听说过任何这样的需求。所以我怀疑在将原始用户输入传递给这些之前,您不需要做任何卫生处理。

当然,在构造任何需要进一步评估的东西(例如 SQL 或 HTML)之前,您当然需要始终清理用户控制的变量(并且为了良好的形式,所有其他变量也是如此)。

在获取值时检查有效性,在使用它们构建事物时在适用的情况下进行清理和转义。不要做中间的事情。

于 2013-01-24T17:53:57.007 回答
2

如果有问题的数据要插入到数据库中,那么是的,应该始终对其进行清理。

但是,要尝试解决您关于何时清理数据的问题,尤其是在数据爆炸、内爆等情况下处理数据方面的问题。

这完全取决于您处理的数据,并且在您的问题中没有一个很好的例子,这只是猜测......但是,我通常每次都会先进行消毒。基本上,如果您担心字符串操作函数中可能存在漏洞,请先清理字符串。

安全永远不能过度,或过度补偿。通过增加安全性(我的意思是很小)增加的少量负载,远远超过拥有一个您自己有信心的系统。

基本上是先安全,后顾之忧!

于 2013-01-24T18:00:49.060 回答
2

两年前,我记得读到其中一些函数使用了一个对特定条目敏感的库,并且它可用于创建新文件等......

你记错了。PHP 的字符串处理函数,例如substr()explode(),对格式错误的输入不敏感——它们总是对传入的字符串执行预期的操作。你继续对结果做什么是你自己的事,你可以仍然需要进一步转义/过滤/编码/修改字符串。但是字符串函数很好。

您可能正在考虑其他一些函数或库,但我无法想象它是什么。现在我只想说你没有什么可担心的。

于 2013-01-24T17:59:27.740 回答
1

如果将用户输入插入到 batabase,则必须对其进行清理。
更多信息:http: //bobby-tables.com/

如果用户输入没有被插入到数据库中,让用户写他们想要的任何东西,它不会对你的脚本造成任何伤害,而且我比较确定 mysql_real_escape_string() 只有在之前建立了与数据库的连接时才有效,否则它会抛出错误。如果我错了,请纠正我。

在这点上,我不妨涵盖所有内容。如果您要连接到数据库,请务必使用 PDO 连接或 mysqlite。至于进一步防止 SQL 注入,并且不推荐使用 MYSQL_* 函数。

于 2013-01-24T17:49:44.387 回答