阻止使用.htaccessPHP文件

nmpmafwu  于 2022-11-16  发布在  PHP
关注(0)|答案(1)|浏览(106)

我想阻止直接访问PHP文件,例如,当有人在地址栏中手动输入它(https://example.com/php/submit.php).我使用了以下代码:

<Files "submit.php">  
   Order Allow,Deny
   Deny from all
</Files>

但是如果我用这种方式阻止它,表单就不能被提交(它不能发送邮件)。
是否有其他方法可以阻止直接访问,但可以提交表单?

qlzsbp2j

qlzsbp2j1#

<form id="form" action="php/submit.php" method="post">

您的表单发出的是POST请求,而“当有人在地址栏中手动输入它时”,他们发出的是GET请求。因此,您可以阻止除POST请求以外的任何请求。

使用<LimitExcept>

例如,将现有指令放在<LimitExcept>容器中:

<LimitExcept POST>
    <Files "submit.php">  
       Require all denied
    </Files>
</LimitExcept>

请注意,这会阻止对系统上任何submit.php文件的非POST请求。
注意:OrderAllowDeny是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路径。例如:

RewriteEngine On

RewriteCond %{REQUEST_METHOD} !=POST [NC]
RewriteRule ^php/submit\.php$ - [F]

以上将为任何非POST请求的/php/submit.php请求提供403禁止(例如,当用户直接在浏览器的地址栏中键入URL时)。
或者,检查请求 * 是否 * 是GET请求,即=GET
但是,您应该已经在PHP代码中执行了这个检查,作为标准表单验证的一部分,因此.htaccess中的这个额外检查应该是多余的。(毕竟,您是如何检查表单是否已经(成功)提交的呢?)

相关问题