Vik*_*ash 15 php apache .htaccess jquery
我只使用ajax使用了一些脚本,我不希望用户直接从浏览器运行这些脚本.我使用jQuery进行所有ajax调用,并将所有ajax文件保存在名为ajax的文件夹中.
所以,我希望创建一个htaccess文件来检查ajax请求(HTTP_X_REQUESTED_WITH)并拒绝该文件夹中的所有其他请求.(我知道http标头可以伪造,但我想不出更好的解决方案).我试过这个:
ReWriteCond%{HTTP_X_REQUESTED_WITH} ^ $
ReWriteCond%{SERVER_URL} ^ / ajax / .php $
ReWriteRule ^.*$ - [F]
但是,它不起作用.我做错了什么?有没有其他方法可以达到类似的结果.(我不想在每个脚本中检查标题).
Ehs*_*san 25
X-Requested-With在非标准的HTTP标头中.
你根本不能在apache中读取它(既不是
ReWriteCond %{HTTP_X_REQUESTED_WITH}
也不是
%{HTTP:X-Requested-With}),所以无法在.htaccess或同一个地方检查它.:-(
它只是在脚本中可访问(例如php),但是你说你不希望因为文件数量而在所有脚本中都包含一个php文件.
auto_prepend_file指定在主文件之前自动解析的文件的名称.您可以使用它自动包含"检查器"脚本.
所以.htaccess在ajax文件夹中创建一个
php_value auto_prepend_file check.php
Run Code Online (Sandbox Code Playgroud)
并check.php根据需要创建:
<?
if( !@$_SERVER["HTTP_X_REQUESTED_WITH"] ){
header('HTTP/1.1 403 Forbidden');
exit;
}
?>
Run Code Online (Sandbox Code Playgroud)
您可以根据需要自定义它.
dyv*_*yve 16
我假设您在ajax目录中拥有所有AJAX脚本,因为您在非工作示例中引用了^/ajax/.php $.
在此文件夹中/ajax/放置.htaccess包含此内容的文件:
SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax
Run Code Online (Sandbox Code Playgroud)
这样做是在没有XMLHttpRequest标头的情况下拒绝任何请求.