阻止用户通过访问端点URL输入AJAX数据

时间:2018-09-08 18:14:03

标签: php jquery ajax

我有一个简单的表单,该表单将表单数据发送到update.php,然后将数据插入MySQL数据库的表中。

$.ajax({
  url: '/actions/update.php',
  type: 'post',
  data: {
    name: 'name-data',
    description:'description-data'
  },
  success: function( data, textStatus, jQxhr ){
    console.log(data);
  },
  error: function( jqXhr, textStatus, errorThrown ){
    console.log(errorThrown);
  }
});

该表单有效,并且数据完美地添加到了数据库中。问题在于,从理论上讲,如果用户知道将数据发布到的URL(如果查看源代码,他们可能会知道),那么他们可以访问该URL并绕过表单添加记录。例如访问/actions/update.php会将空白记录添加到数据库中。

是否可以阻止用户访问该文件/目录,同时仍然允许将数据发布到该文件/目录?

3 个答案:

答案 0 :(得分:3)

  

是否仍然可以阻止用户访问该文件/目录   允许将数据发布到其中?

这是对问题的错误思考方式。

如果客户端JavaScript可以发出该请求,则用户可以对同一PHP文件发出任何请求。

相反,在您的PHP中,您需要验证传递的参数是否符合可接受的定义。

例如,您可能需要检查namedescription参数是否在某个字符长度以下,或者当前登录的用户是否有权更新相关记录。

请仔细考虑什么是可以接受的。添加完这些检查后,用户是否“访问该URL并绕过表单添加记录”就没关系了。

答案 1 :(得分:1)

我认为可能的解决方案是,如果未通过name请求设置变量descriptionpost,则可以阻止用户

if(isset($_POST['name']) && isset($_POST['description']))
  {
    //do your task
  }
  else
  {
    header('Location:otherpage.php')// redirecting it to other page if user visits it directly
  }

答案 2 :(得分:0)

如果用户可以访问URL,则表示允许GET请求。您只需要接受POST请求。