Php 通过访问端点URL停止用户输入AJAX数据
我有一个简单的表单,它将表单数据发送到update.php,然后update.php将数据插入MySQL数据库的表中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
$.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}只能实现有限的保护。