2010-10-06 23 views
0

我有有一个链接到下一个页面一个网格,我有一个按钮,从当前页面导航回给电网。到现在为止我用这个方法来导航回即如何在我的Perl CGI程序中创建前一个网页的链接?

 <INPUT TYPE="BUTTON" VALUE="Back to Datagrid" onClick="history.go(-1);"> 

但我面对的时候我曾与沿其他一些制约因素的一些问题进行导航,所以我发现是这样的:

$exit = $ENV{'HTTP_REFERER'}; 
    <INPUT TYPE="BUTTON" VALUE="Back to Datagrid" onClick="$exit"> 

但它的不工作。我不知道为什么,这两种方法有什么区别?

+1

恭喜,您刚创建了您的(希望)首次注入漏洞。切勿从用户那里接受输入,并将其包含在输出中,而不必首先对其进行适当的验证或转义。 :-) – rafl 2010-10-06 06:17:47

+0

非常感谢,我戈纳去与第一种方法我想,这似乎在更安全的.. – SUSH 2010-10-06 06:24:58

+0

不要用第一种方法去。更多人拥有一个内置的后退按钮,可以启用JavaScript。 – Quentin 2010-10-06 06:25:49

回答

4

第一种方法试图复制的返回按钮的功能。

第二种方法需要的任何浏览器据称是前一页的URI,把它放在网页时没有消毒它,并尝试运行URI,如果它是JavaScript的。由于URI很少有效的JavaScript,所以此即时错误。

更好的方法是找出你想要去的URI(大概根据你用来构建当前页面的数据),并创建一个正常的转发指向链接(<a href...)...并让如果用户想要返回,用户可以在浏览器中使用内置的后退按钮。这种做法:

  • 如果JS是不可用
  • 如果他们的浏览器不
  • 不会混淆用户通过使他们的浏览器的历史发送一个可选的HTTP标头不会失败也不会失败以意想不到的方式工作

我不能肯定,但我怀疑是有风险的人可以制作一个URI,并把一个链接到您的网页,包括它"<script>...。然后,用户可以点击该链接,将他们来自的页面的URI插入到页面中,并向您介绍XSS攻击。 (我觉得这应该失败,因为其中的一些人物应该是URI编码的,但我不想冒这个险 - 始终把反对XSS标准的保护,只要你有数据从系统外部的和背部到您的网页)

+0

感谢您提供的信息,但是,请允许我告诉我是否有任何方法让第二种方法运行,或者我应该使用第一种方法! – SUSH 2010-10-06 06:16:53

+0

嗯。您将其视为URI而不是JavaScript。要么写一个使用URI的脚本(而不是假设一个URI *是一个脚本),或者只是使用一个链接。或者不要,因为你不能相信引用者首先在那里。 – Quentin 2010-10-06 06:19:02

相关问题