Answers:
我只是将includes
文件夹移出了Web根目录,但如果要阻止直接访问整个includes
文件夹,则可以.htaccess
在该文件夹中放置一个文件,该文件仅包含:
deny from all
这样,您无法从该文件夹打开任何文件,但可以将它们包含在php中而没有任何问题。
这是mod_rewrite
基于纯的解决方案:
RewriteRule ^(includes/|submit\.php) - [F,L,NC]
如果URI包含/includes/
或,这将显示禁止使用的错误/submit.php
可以使用Files指令并禁止访问所有文件,然后再次使用它来设置可访问的文件:
<Files ~ "^.*">
Deny from all
</Files>
<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
Allow from all
</Files>
1个基于线性mod_alias的解决方案:
RedirectMatch 403 ^/folder/file.php$
这将显示/folder/file.php的禁止错误
^folder
。
您的Q分为两个部分,jeroen和anubhava的解决方案都适用于第一部分-拒绝访问/ includes。阿努巴瓦的作品也适用于第二部分。我更喜欢后者,因为DOCROOT/.htaccess
无论如何我都会使用它,并将所有这样的控件都保存在一个文件中。
但是,我不想讨论的是“拒绝访问submit.php
” 的概念。如果您不想使用,submit.php
那为什么还要在DOCROOT中使用它呢?我怀疑这里的答案是,您以某些形式将其用作操作目标,并且只希望在提交表单时而不是直接(例如从垃圾邮件程序中)将其触发。
如果这是真的,那么您将无法使用anubhava的第二部分,因为这会导致您的表单失败。您可以在此处执行(i).htaccess
检查,以确保引荐来源网址是您自己的索引页:
RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC]
RewriteRule ^submit\.php$ - [F]
并且(ii)在PHP index.php表单生成器中包括一些用于时间戳和验证的隐藏字段。验证可以是时间戳的MD5的前10个字符和一些内部秘密。在处理提交时,您可以(i)验证时间戳和验证是否匹配,以及(ii)时间戳在当前时间的15分钟以内。
这可以防止垃圾邮件,因为垃圾邮件发送者可以获得有效的时间戳记/验证对的唯一实用方法是解析表单,但是这种抓取只有15分钟的寿命。