如何保护window.location URL

时间:2014-07-15 12:22:28

标签: php jquery

我只创建了两个页面。第一页有几个按钮。如果用户单击一个按钮,则按钮的ID将发送到另一个页面,并显示在Div。

示例 第1页:

<script type="text/javascript">
   $(document).ready(function(){
   $(".btn").click(function()
{

    var val = $(this).attr("id");

    $(".divX").text(ausles);

     window.location = 'page2.php?valX=' + val;

});});  
</script>

使page2.php

<div class="ed">  <?php 
echo $_GET["valX"];
?></div>

我的问题:

用户现在可以更改URL中的值(x77):localhost / pt1 / page2.php?valX = x77 `

我怎么能阻止这个?

4 个答案:

答案 0 :(得分:3)

您需要决定用户是否可以更改valX的价值。

话虽如此,有几种方法可以解决这个问题。

<强> $ _ POST

您可以将valX的值作为表单提交而不是重定向发布,这样做的缺点是,如果用户刷新或重新加载页面,他们可能会丢失帖子数据。

<强> $ _ COOKIE

您可以设置cookie,这可以在JS中完成并在PHP中检索,有关如何在Javascript Look Here中设置cookie的示例,Cookie仍然可以被操纵但不太可能。

<强> $ _ SESSION

这可能是最安全的方式,但要求你在PHP中设置会话,这需要你在你的情况下使用AJAX,当点击按钮时,AJAX到一个在会话中存储值的php文件,然后在第二页上检索它。

答案 1 :(得分:0)

您无法阻止对网址的更改。你有两个选择 -

一个。更改为使用POST而不是GET(URL中没有任何内容)

湾查询字符串中需要多个项目,其中所有项目必须有效才能查看页面。

答案 2 :(得分:0)

尝试将您的值发布到其他页面上。下面的代码将在运行时创建一个表单,并将自动提交给给定的URL

$(".btn").click(function(){
  var val = $(this).attr("id");
  $(".divX").text(ausles);
  var form = document.createElement('form');
  form.method = 'post';
  form.action = 'page2.php';
  form.innerHTML = '<input type="hidden" id="valX" name="valX" value="' + val + '">';
  document.body.appendChild(form);
  form.submit();
});

然后进入page2.php

<div class="ed">  <?php echo $_POST["valX"];?></div>

答案 3 :(得分:0)

使用像这样的按钮定义一个数组

$buttonValues = array(array(1, 'Text for number 1'), ...);

现在您可以轻松地循环输出。 在page2.php中,您可以检查提交的ID是否在数组中,如果没有中止。 这是一种白名单方法,因此不受任何客户端欺骗的影响。

通过POST或COOKIE发送它只是意味着它不能用手绕过它。如果有人花时间模仿所有请求POST,可以更改COOKIES。