【问题标题】:Prevent POST request阻止 POST 请求
【发布时间】:2019-04-25 06:43:49
【问题描述】:

我有一台装有 Linux 和 Apache 最新版本的服务器。我注意到,如果我将带有数据的 POST 发送到站点上的任何地址,即使没有特定的 PHP 脚本可以处理它,这也是被接受的。我认为这很正常。但是我怎样才能防止这种情况呢?我知道某些网站(Ebay)在返回错误之前完成了帖子(想象一下,如果帖子包含大文件,则保证服务器带宽消耗)。 如何防止 POST 在 php 脚本或任何其他脚本的上游运行?您必须在 Apache 服务器上工作还是在 .htaccess 中工作?

【问题讨论】:

  • 没有。您可以添加输入字段验证以检查表单是否已填写。如果您需要在提交之前检查 dorm 的操作 php 脚本是否存在,您可以使用 php 或 ajax 来完成。使用 php $filename = "yourfile.php 文件路径"; if (file_exists($filename)) { $actionurl="$filename" } else{$actionurl = "#"} 然后在表单的 action="$actionurl" 中使用 $actionurl
  • 也许您可以按照此处的建议在您的 apache 配置中使用 指令security.stackexchange.com/a/56778/201311
  • Vishwa.是的,我知道,但是php不存在,甚至脚本都不存在,目录是空的。

标签: php linux apache http-post


【解决方案1】:

您必须在请求到达 PHP 之前阻止它。我不确定header() 方法,但限制来自 .htaccess 的访问似乎是一个更安全的选择。

RewriteCond %{REQUEST_METHOD} POST
RewriteRule .* – [F,L]

【讨论】:

  • 如果我采用这种方法会阻止整个站点接受 POST 吗?如果我有一个可以处理它们的脚本,我如何才能接受它们?
  • 这取决于您的项目结构及其复杂性。您可以为每个可以处理 POST 请求的页面添加RewriteCond。我不确定如何在这里提供帮助。您可能还想考虑一下为什么要阻止 POST。您提到了带宽消耗,但我认为这可能不是问题,或者更好 - 我不认为拒绝 POST 是一种解决方案。想要占用您的带宽的任何人都可以使用 GET 轻松做到这一点,或者只针对支持 POST 的链接。
  • 是的,我的回答会阻止整个网站的 POST 请求。您必须使用自定义答案以满足您的需求。也许将所有“非 POST”脚本放入一个文件夹并在该特定文件夹中添加 .htaccess 规则?
  • 每个站点目录都必须有它的 .htacces 和适当的规则,并且在 PHP 脚本中还有其他允许或拒绝任何操作的规则。谢谢你。我认为这是我正在寻找的解决方案。
  • 我试过了,但即使返回错误,帖子仍然会执行。我从使用 Indy idHttp 组件的 Delphi 编写的应用程序中发布它。
【解决方案2】:

我不确定,但我认为您应该设置响应标头以告诉您的浏览器您的端点接受什么...

header('Access-Control-Allow-Methods', 'GET, PUT, DELETE, PATCH, OPTIONS'); // just exclude the POST method

我只是吐口水,我是从 CORS 规范中得到的。如果它不起作用,那么可能是因为这个标头必须响应 OPTIONS 请求。

如果这行得通,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2019-10-11
    • 2019-02-22
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多