我想阻止直接访问PHP文件,例如,当有人在地址栏中手动输入它(https://example.com/php/submit.php).我使用了以下代码:
<Files "submit.php">
Order Allow,Deny
Deny from all
</Files>
但是如果我用这种方式阻止它,表单就不能被提交(它不能发送邮件)。
是否有其他方法可以阻止直接访问,但可以提交表单?
我想阻止直接访问PHP文件,例如,当有人在地址栏中手动输入它(https://example.com/php/submit.php).我使用了以下代码:
<Files "submit.php">
Order Allow,Deny
Deny from all
</Files>
但是如果我用这种方式阻止它,表单就不能被提交(它不能发送邮件)。
是否有其他方法可以阻止直接访问,但可以提交表单?
1条答案
按热度按时间qlzsbp2j1#
您的表单发出的是POST请求,而“当有人在地址栏中手动输入它时”,他们发出的是GET请求。因此,您可以阻止除POST请求以外的任何请求。
使用
<LimitExcept>
例如,将现有指令放在
<LimitExcept>
容器中:请注意,这会阻止对系统上任何
submit.php
文件的非POST请求。注意:
Order
,Allow
和Deny
是Apache 2.2指令,以前在Apache 2.4上被弃用(除非你在LiteSpeed上,否则你更可能使用Apache 2.4)。Require all denied
是Apache 2.4的等价指令。但是,你不应该混合两个模块的身份验证指令。使用mod_rewrite
或者,在
.htaccess
根文件顶部附近使用mod_rewrite,可以直接指向/php/submit.php
URL路径。例如:以上将为任何非POST请求的
/php/submit.php
请求提供403禁止(例如,当用户直接在浏览器的地址栏中键入URL时)。或者,检查请求 * 是否 * 是GET请求,即
=GET
但是,您应该已经在PHP代码中执行了这个检查,作为标准表单验证的一部分,因此
.htaccess
中的这个额外检查应该是多余的。(毕竟,您是如何检查表单是否已经(成功)提交的呢?)