我有一个具有下一页链接的网格,并且有一个按钮可以从当前页面导航回网格。到目前为止,我一直使用这种方法进行导航,即
<INPUT TYPE="BUTTON" VALUE="Back to Datagrid" onClick="history.go(-1);">
但是当我遇到其他一些限制时,我会遇到一些导航上的问题,所以我发现了类似的东西:
$exit = $ENV{'HTTP_REFERER'};
<INPUT TYPE="BUTTON" VALUE="Back to Datagrid" onClick="$exit">
但这不起作用。我不知道为什么,这两种方法有什么区别?
最佳答案
第一种方法尝试复制后退按钮的功能。
第二种方法采用浏览器声称的是上一页URI的任何内容,将其放在页面中而不对其进行清理,然后尝试像运行JavaScript一样运行URI。这会立即出错,因为URI很少是有效的JavaScript。
更好的方法是计算出要转到的URI(大概基于用于构建当前页面的数据),并为其创建一个普通的前向指向链接(<a href...
)……然后让用户如果要返回,请使用其浏览器中的内置后退按钮。这种方法:
如果JS不可用,则不会失败
如果他们的浏览器未发送可选的HTTP标头,则不会失败
不会以意外的方式使浏览器的历史记录起作用,从而使用户感到困惑
我不确定,但是我怀疑有人可能会制作URI并将其上的链接放在您的页面上,包括其中的"<script>...
。然后,用户可以单击该链接,获得他们来自页面的URI,并将其插入页面,然后向您介绍XSS攻击。 (我认为这样做会失败,因为其中某些字符应进行URI编码,但我不想冒险-每当有数据从系统外部返回到页面中时,请始终设置针对XSS的标准保护措施)