我正在创建一个带有php后端的网站。我有一个名为/inc/
的目录,其中包含生成html网页时包含的php包含文件。
如果用户试图请求/inc/
目录中的任何文件(例如,通过浏览器中的url),我已经做到了,这样他们就可以重定向到主页。我这样做是为了确保这些文件都不会被外部调用。
我需要通过jQuery POST请求调用其中一个文件。
这是我的问题:
1) 我可以以某种方式隐藏POST中请求的文件的url吗?
2) 由于/inc/文件夹中文件的外部请求被重定向到主页,因此通过jQuery对/inc/
文件夹中文件进行POST会失败吗?或者服务器是否区分POST请求和其他类型的请求?
3) (可选)我如何确保POST请求是"合法"完成的,而不是机器人试图通过同时发出数千个POST请求来破坏我的服务器?
- 不知怎么的,如果不在某个地方使用链接的话。提醒自己jQuery/Ajax/XHTTPRequests/Xm。。。任何指向外部的东西都必须指向外部。总会有一个url,而且它总是可以追踪的
确保您的url不太可追踪的选项
- 为javascript调用创建一个页面(隐藏起来,但实际上什么都不做)
- 编辑.htaccess选项并使用它来处理javascript请求
- 编辑.htaccess选项和用于javascript服务器端处理的php页面
我将讨论选项3
示例(包括2.!)
#Checks if the request is made within the domain
#Edit these to your domain
RewriteCond %{HTTP_REFERER} !^.*domain.com [NC]
RewriteCond %{HTTP_REFERER} !^.*domain.com.*$ [NC]
#Pretends the requested page isn't there
RewriteRule .(html|php|api.key)$ /error/404 [L]
#Set a key to your 'hidden' url
#Since this is server-based, the client won't be able to get it
#This will set the environment variable when a request is made to
#www.yourwebsite.com/the folder this .htaccess is in/request_php_script
SetEnvIf Request_URI "request_php_script" SOMEKINDOFenvironmentNAME=http://yourlink.com
#Alternatively set Env in case your apache doesn't support it
#I use both
SetEnv SOMEKINDOFNAME request_php_script
#This will send the requester to the script you want when they call
#www.yourwebsite.com/the folder this .htaccess is in/request_php_script
RewriteCond %{REQUEST_URI} request_php_script$ [NC]
#if you don' want a php script to handle javascript and benefit the full url obfuscation, write the following instead
#RewriteRule ^.*$ /adirectscript.php [L]
RewriteRule ^.*$ /aredirectscript.php [L]
#and yes this can be made shorter, but this works best if folders and keys in your ENV are similar in some extend
在这种情况下,可以调用一个php脚本,将您重定向到正确的页面,但如果一切都是内部的,那么我看不出您隐藏脚本url的原因。如果您将.htaccess设置为如图所示,则只有您的页面可以访问它。用户和外部源无法访问它,因为它们将被重定向。
然而,如果您的脚本引用外部API密钥,那么这可能会很有用,并且您可以调用重定向脚本
<?php
echo file_get_contents(getEnv("SOMEKINDOFNAME"));
?>
现在,当这个脚本被调用时,它将返回您的内容。如果你想加载页面,你可以调用这里描述的东西来代替
使用Php 获取网页内容
要充分利用这一点,您必须在www.yourwebsite.com/文件夹this.htaccess中的/request_php_script.php中将jQuery POST方法设置为POST
- 如果1和2像上面一样正确完成,您就不必担心来自外部的机器人试图访问您的.php脚本
旁注:您可以跳过额外的php脚本,但可以在.har文件中进行跟踪。这意味着最终,你的url仍然可以在某个地方访问。使用额外的php脚本(为了方便起见,给它提供查询参数)会混淆url,使其很难找到。我用这种方式隐藏了对外部API密钥的请求
TLDR:
- 为页面设置.htaccess服务器环境变量
- 如果
- 最初来自我的页面
- 由脚本调用
- 将javascript设置为调用指定页面
中等"安全">
在脚本中找不到
如果不保存har文件,则无法追溯
- 创建php文件以返回页面内容
- 将.htaccess设置为指向php而不是页面
高度"安全">
在脚本中找不到
即使在保存har文件时也无法追溯
1)编号
2) 这取决于你们如何处理重定向,最好的方法是试试看。
3) 总的来说,这不是一项容易的任务。简单的方法是检测相同的客户端并限制请求率。一般来说,无法仅通过请求数据来检测机器人。
至于您的最后一条评论,您可以使用.htaccess限制对数千个文件的访问,而无需重定向。然而,使用AJAX仍然无法获得它们。隐藏某些东西的唯一真正原因是里面有一些敏感信息,比如密码、登录等。覆盖它其实并不重要,没有人对一些隐藏的未来文件感兴趣。