我一直在使用PHP一段时间,我开始问自己,如果我养成良好的习惯。消毒PHP变量,我过度使用它吗?
其中之一是我相信了由过度使用PHP的消毒方法,例如,一个用户通过表单注册时,我得到了下面的帖子变量:
$_POST['name']
,$_POST['email']
和$_POST['captcha']
。现在,我通常所做的显然是清理我将要放入MySQL的数据,但是在比较验证码时,我也会对其进行清理。因为我相信我误解了PHP消毒,我很好奇,有什么其他的情况,当你需要清理数据,除了使用它来放置在MySQL中的东西(注意我知道消毒也是需要防止XSS攻击) 。而且,我的习惯是消除几乎每个来自用户输入的变量,一个糟糕的变量?
永远不要相信用户输入是最好的习惯之一。数据库注入是显而易见的原因,但还有其他一些。 eval()语句,动态类创建$ x = new $ classnamehere()等 – STLMikey 2014-10-27 21:25:20
所有用户输入/外部输入都有潜在危险,所以如果 - 例如 - 你将captcha值与内部字符串进行比较,一些(尽管很小)的风险是,传入的价值可能会“欺骗”并以某种方式通过比较逻辑。有了这个说法,是的,一些输入需要比其他输入消毒更多,因为一些数据用于高风险场景。如果可能的话,我建议通过一些通用函数清理所有用户输入,并使用MySQLi或PDO自动转义任何数据来抵御注入风险。 – Anthony 2014-10-27 21:29:36
我相信这是一个好习惯,事实上 - 我相信你的应用程序不应该触及任何用户输入的数据,而不会首先进行消毒处理 - 我有一个类通过post/get请求循环并生成消毒版本,然后我可以访问它们 – 2014-10-27 21:30:18