php - 通过访问端点 URL 停止用户输入 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 将在数据库中添加一条空白记录。
是否可以阻止用户访问该文件/目录,同时仍允许将数据发布到该文件/目录?
解决方案
是否可以阻止用户访问该文件/目录,同时仍允许将数据发布到该文件/目录?
这是思考问题的错误方式。
如果客户端 JavaScript 可以发出该请求,那么用户可以向同一个 PHP 文件发出任何请求。
相反,在您的 PHP 中,您需要验证所传递的参数是否符合您可接受的定义。
例如,您可能需要检查name
anddescription
参数是否在某个字符长度以下,或者当前登录的用户是否具有更新相关记录的权限。
仔细考虑什么是可接受的,什么是不可接受的。添加这些检查后,用户是否“访问 [s] 该 URL 并绕过表单添加记录”就无关紧要了。
推荐阅读
- css - 我试图在内容上添加边框
- javascript - 如何在事件处理程序中获取值和更改外部变量?
- python - 在 Windows asyncio 上与 python 并行运行进程
- c# - 找不到类型或命名空间名称 PagedListRenderOptions
- vhdl - VHDL:当> 32位时如何将有符号/无符号表示为整数字符串
- python - OpenMP/Cython 中的空闲线程可以用于并行化工作块的剩余部分吗?
- assembly - 如何在程序集上运行调试器
- javascript - “错误未处理的承诺拒绝”会成为 aws lambda 中的问题吗?
- javascript - React Context API 是否取代了对组件 props 的需求?
- apache-beam - 取决于来自 bazel 项目的 apache_beam