什么时候信任数据/变量

时间:2010-05-22 01:27:08

标签: security validation

我们都知道所有用户数据,GET / POST / Cookie等都需要进行安全验证。

但是一旦它被转换成局部变量,你什么时候停止?

例如

if (isValidxxx($_GET['foo']) == false) {
  throw InvalidArgumentException('Please enter a valid foo!');
}

$foo = $_GET['foo'];
fooProcessor($foo);

function fooProcessor($foo) {
  if (isValidxxx($foo) == false) {
    throw Invalid......
  }
//other stuff
}

对我来说,这就是顶部。 但是如果从数据库中加载值...

我希望我有道理:)

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

答案 2 :(得分:0)

答案 3 :(得分:0)

回答你的问题$ _GET和$ _POST 永远不会被信任。但是,在使用变量之前,它不是漏洞。如果您将其打印出print($_GET[xss]),那么您有一个xss漏洞。如果您将此变量插入数据库然后将其打印出来(如论坛帖子),那么您有存储的xss ,这更糟糕。

您需要更好地了解攻击者的心态。像$ _GET这样的变量是污点的来源,像print()mysql_query()这样的函数调用是汇点。黑客正在寻找他可以用受污染的变量影响的汇。在PHP中有很多接收器,我建议阅读this black paper(或红纸,无论其确定性不是白色......)。请务必阅读语言与程序员的相关部分。