PHP XSS问题 - GET参数是否在页面上没有输出任何风险?

时间:2011-01-27 17:38:56

标签: php security xss

好的,我只是想知道,这是否一定是XSS漏洞,因为它不会输出结果?

例如:

if($_GET['doRedirect'] == "yes") {
//redirect Page
} else {
//dont redirect page
}

然后

http://example.com?doRedirect=yes

我已经阅读了所有XSS的内容,并认为我对它有很好的理解,尽管现在我有点困惑。 只有在用户输入然后在页面上输出时才能使用XSS吗?

非常感谢:)

2 个答案:

答案 0 :(得分:3)

那应该是安全的。

只有在您实际输出用户在页面上生成的内容时,才能进行跨站点脚本编写。

这样做的一个示例是,如果您将用户的名称作为get参数name,并执行以下操作:

<?php
echo "Hello, {$_GET['name']}. How are you today?";
?>

在这种情况下,如果有人将name - 参数设置为<script>alert('Hello, There!');</script>,他们就会突然在您网域上托管的网址上运行一些JavaScript。

当然,这个例子非常温和,但他们可以运行该代码的事实意味着他们可以运行他们希望的任何代码。例如,他们可以添加一个脚本,记录通过该URL登录的所有用户的用户名和密码。您的网站看起来很真实,但他们可以访问他们不应该拥有的内容。

如果您对跨站点脚本编写感到困惑或有兴趣了解更多有关跨站点脚本的信息,请查看以下问题:

答案 1 :(得分:2)

假设您只在doRedirect语句中使用if输入参数而没有其他任何内容,那么它就不可用了。

如果你要做这样的事情,那么是的,它会很脆弱:

if($_GET['doRedirect'] == "yes")
{
  //redirect Page
}
else
{
  //dont redirect page

  // Create message to display in the browser
  $messageToUser = 'You selected '.$_GET['doRedirect'].' for your redirection';
}

在这种情况下,您应该对输入执行验证。