【问题标题】:Pass ID of Entity via Ajax to Controller通过 Ajax 将实体 ID 传递给控制器
【发布时间】:2015-08-13 22:35:48
【问题描述】:

通过 ajax 将对象的标识符传递给服务器/控制器的最佳方式是什么(例如,我们在站点“book/edit/mybookname”上,以及如何通过 ajax 更新这本书实体“mybookname”)?

我想到了一些方法,想知道最常见和最安全的方法是什么:

1) 将书的 ID 传递给控制器​​

-> 问题:可以使用浏览器的控制台更改 ID 变量/字段

2) 将当前 URL (window.location.href) 传递给控制器​​,并从控制器中的 url 中提取名称

-> window.location.href 无法通过控制台更改..?

我知道我必须检查服务器端,如果用户应该有权编辑实体。但是如果他有不止一本书,他可能会将 id 参数更改为他拥有的另一本书,然后他会在后台更改另一本书的演示文稿,而不是他当前正在浏览的那个。

【问题讨论】:

  • 可以在用户访问book/edit/mybookname时设置会话变量。但我真的不明白这一点,如果用户想弄乱他/她自己的收藏,那是他们的问题 IMO。
  • 您好 jeroen,会话变量不会有帮助,您可以打开不同书籍的多个标签。好的,所以常用的方法是:检查访问权限,但是当登录的用户试图操纵表单/参数时,最后他只能把他的书搞砸。
  • 确保它不能被操纵的唯一方法是使用一个不是来自用户但存储在服务器上的值。但正如您所注意到的,这也可能失败。所以是的,他们的收藏,他们的问题,只要他们只能访问自己的东西。

标签: php jquery ajax security parameter-passing


【解决方案1】:

Thought ajax 可以使用 post 数据。不能在浏览器地址栏中编辑。

var xmlhttp;    
}

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState===4 && xmlhttp.status===200)
  {
         //do whatever with response
  }

  };
xmlhttp.open("POST","ajax/ajax.php);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("field1=whatever&field2=whateverelse");

【讨论】:

  • 您好,谢谢您的回答。我认为这只会“移动”将值更改为另一点的可能性..因为问题不在于“传递部分”,问题是我需要在页面上的某个位置存储 id 而这个值可以是已更改(在 js 配置对象或隐藏字段中)。所以它不会改变任何使用 POST 或 URL 来传输 ID 的东西。而我现在的结论是我只是传递了“window.location.href”,因为这个值不能改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
相关资源
最近更新 更多