我在我的PHP应用程序中使用了很多Ajax,并且通常路由POST请求进行处理我检查预期变量和值,并根据我处理脚本。
例如,如果我想使用AJAX删除或插入某些内容,我将处理POST请求的典型PHP文件就像
//Initialize the class on top of the page that will be dealing with CRUD functions.
$class = new CRUD();
//Delete Something
if(isset($_POST['option']) && $_POST['option'] == 'delete-something') {
//Delete logic.
}
//Save Something
if(isset($_POST['option']) && $_POST['option'] == 'save-something') {
//Save logic.
}
等等。我只是想知道代码if(isset($_POST['option']) && $_POST['option'] == 'delete-something')
是否会保护我免受未经授权的请求。或者我应该在条件下使用$_SERVER['REQUEST_METHOD'] == 'POST'
。这两者真的有什么区别吗?因为我看到很多开发人员使用$_SERVER['REQUEST_METHOD'] == 'POST'
。
答案 0 :(得分:1)
如果HTTP请求它不是POST请求,$_POST
Docs将不会填充实际值,因此从技术上讲,如果您测试特定值,则无需检查请求是否为POST请求。
但是,您有时只想知道在$_POST
超全局数组中没有测试具体值,因此检查服务器变量$_SERVER['REQUEST_METHOD']
Docs是有意义的。
所以:这取决于你需要做的事情。
答案 1 :(得分:0)
嗯,至少,这样做......
if (isset($_POST['option']) && $_POST['option'] == 'delete-something')
...会在$_POST['option']
不存在的情况下阻止通知。因此,即使使用isset($_POST['option'])
,您可能仍希望使用$_SERVER['REQUEST_METHOD'] === 'POST'
。
答案 2 :(得分:0)
我只是想知道代码
if(isset($_POST['option']) && $_POST['option'] == 'delete-something')
是否会保护我免受未经授权的请求。
当然没有。
我不明白为什么你认为它可以提供任何保护,你在“未经授权的请求”下的意思是什么。
我应该在条件下使用
$_SERVER['REQUEST_METHOD'] == 'POST'
吗?两者之间真的有什么不同吗?
不确定。
$_POST['option'] == 'delete-something'
正在检查某个字段
$_SERVER['REQUEST_METHOD'] == 'POST'
正在检查请求方法
你根本不能使用后者代替前者。我也不明白这个问题。