3

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

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

我需要通过jQuery POST请求调用这些文件之一。

这是我的问题:

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

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

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

4

2 回答 2

2
  1. 不是没有在某处使用链接,不知何故。提醒自己 jQuery / Ajax / XHTTPRquests / Xm... 任何指向外部的东西都必须指向外部。总会有一个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 获取网页内容

要充分利用这一点,您必须将您的 jQuery POST 方法设置为 POST 在 www.yourwebsite.com/这个 .htaccess 所在的文件夹/request_php_script.php

  1. 如果 1 和 2 正确完成,就像上面一样,您不必担心来自外部的机器人试图访问您的 .php 脚本

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

TLDR

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

中等“安全”

在脚本中找不到

不保存har文件就无法追溯

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

高度“安全”

在脚本中找不到

无法追溯,即使保存 har 文件

于 2017-03-01T20:00:59.147 回答
0

1) 没有。

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

3) 一般而言,这不是一件容易的事。简单的方法是检测相同的客户端并限制请求率。通常仅通过请求数据无法检测机器人。

至于您的最后一条评论,您可以使用 .htaccess 限制对 thouse 文件的访问,而无需重定向。但是,您仍然无法使用 AJAX 获得它们。隐藏某些内容的唯一真正原因是内部是否存在一些敏感信息,例如密码、登录名等。过分无关紧要,没有人对一些隐藏的实用程序文件感兴趣。

于 2012-10-12T04:28:43.383 回答