Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过访问端点URL停止用户输入AJAX数据_Php_Jquery_Ajax - Fatal编程技术网

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

Php 通过访问端点URL停止用户输入AJAX数据,php,jquery,ajax,Php,Jquery,Ajax,我有一个简单的表单,它将表单数据发送到update.php,然后update.php将数据插入MySQL数据库的表中 $.ajax({ url: '/actions/update.php', type: 'post', data: { name: 'name-data', description:'description-data' }, success: function( data, textStatus, jQxhr ){ console.log

我有一个简单的表单,它将表单数据发送到update.php,然后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并绕过表单添加记录。e、 g.访问/actions/update.php将向数据库中添加一条空白记录

$.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,则表示允许GET请求。您只需要接受POST请求。

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

是否存在阻止用户访问该文件/目录的方法 允许将数据发布到它

这是思考问题的错误方式

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

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

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

仔细考虑什么是可接受的,什么是不可接受的。一旦添加了这些检查,用户是否“访问该URL并绕过表单添加记录”就无关紧要了

是否存在阻止用户访问该文件/目录的方法 允许将数据发布到它

这是思考问题的错误方式

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

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

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


仔细考虑什么是可接受的,什么是不可接受的。一旦您添加了这些检查,用户是否“访问该URL并绕过表单添加记录”就无关紧要了。

我认为可能的解决方案是,如果您的变量
name
description
未设置
post
请求,您可以阻止用户

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
  }

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

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
  }

您是否尝试过在
update.php
中使用
header
?如果您的是Codeigniter项目,那么在表单中添加CSRF可能会有助于避免未经授权的随机帖子。您也可以不用Codeigniter来完成,但这需要做更多的工作在
update.php
的顶部,您可以尝试通过从另一个文件导入url或使用密钥来隐藏url。我会说使用key@ZainFarooq如果你在
update.php
中尝试了
header
,那么如果你的是Codeigniter项目,那么在表单中添加CSRF可能会有助于防止未经授权的随机帖子。您也可以不用Codeigniter来完成,但这需要做更多的工作在
update.php
的顶部,您可以尝试通过从另一个文件导入url或使用密钥来隐藏url。我会说使用key@ZainFarooq这难道不会使访问数据变得不可能吗?你仍然可以通过第三方应用程序访问数据,比如邮递员可以创建一个随机的HTML表单,并且仍然发送到他的控制器,除非服务器端验证了“请求源”。因此,添加if($\u SERVER['REQUEST\u METHOD']=='POST'){//allow data to insert}或者{//reject REQUEST}只能实现有限的保护。您仍然可以通过第三方应用程序(如Postmanuser)访问数据。您可以始终创建一个随机HTML表单,并仍然向其控制器发布,除非服务器端对其进行验证“请求源”。因此,添加if($\u服务器['request\u方法']=='POST'){//allow data to insert}或者{//reject request}只能实现有限的保护。