隐藏AJAX POST的url和重定向含义



我正在创建一个带有php后端的网站。我有一个名为/inc/的目录,其中包含生成html网页时包含的php包含文件。

如果用户试图请求/inc/目录中的任何文件(例如,通过浏览器中的url),我已经做到了,这样他们就可以重定向到主页。我这样做是为了确保这些文件都不会被外部调用。

我需要通过jQuery POST请求调用其中一个文件。

这是我的问题:

1) 我可以以某种方式隐藏POST中请求的文件的url吗?

2) 由于/inc/文件夹中文件的外部请求被重定向到主页,因此通过jQuery对/inc/文件夹中文件进行POST会失败吗?或者服务器是否区分POST请求和其他类型的请求?

3) (可选)我如何确保POST请求是"合法"完成的,而不是机器人试图通过同时发出数千个POST请求来破坏我的服务器?

  1. 不知怎么的,如果不在某个地方使用链接的话。提醒自己jQuery/Ajax/XHTTPRequests/Xm。。。任何指向外部的东西都必须指向外部。总会有一个url,而且它总是可以追踪的

确保您的url不太可追踪的选项

  1. 为javascript调用创建一个页面(隐藏起来,但实际上什么都不做)
  2. 编辑.htaccess选项并使用它来处理javascript请求
  3. 编辑.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. 如果1和2像上面一样正确完成,您就不必担心来自外部的机器人试图访问您的.php脚本

旁注:您可以跳过额外的php脚本,但可以在.har文件中进行跟踪。这意味着最终,你的url仍然可以在某个地方访问。使用额外的php脚本(为了方便起见,给它提供查询参数)会混淆url,使其很难找到。我用这种方式隐藏了对外部API密钥的请求

TLDR

  • 为页面设置.htaccess服务器环境变量
  • 如果
    • 最初来自我的页面
    • 由脚本调用
  • 将javascript设置为调用指定页面

中等"安全">

在脚本中找不到

如果不保存har文件,则无法追溯

  • 创建php文件以返回页面内容
  • 将.htaccess设置为指向php而不是页面

高度"安全">

在脚本中找不到

即使在保存har文件时也无法追溯

1)编号

2) 这取决于你们如何处理重定向,最好的方法是试试看。

3) 总的来说,这不是一项容易的任务。简单的方法是检测相同的客户端并限制请求率。一般来说,无法仅通过请求数据来检测机器人。

至于您的最后一条评论,您可以使用.htaccess限制对数千个文件的访问,而无需重定向。然而,使用AJAX仍然无法获得它们。隐藏某些东西的唯一真正原因是里面有一些敏感信息,比如密码、登录等。覆盖它其实并不重要,没有人对一些隐藏的未来文件感兴趣。

最新更新