我有一堆帮助程序文件和解析器,其中一些是通过AJAX调用的。我的理解是,我不能使用 .htaccess 来阻止对这些文件的访问,因为它会破坏 AJAX。所以我的问题是:允许直接访问这些文件实际上有任何危害或危险吗?如果是这样,如何允许 AJAX 但阻止用户访问它们?
php $_SERVER
值来验证 ajax 请求,但如果用户使用 spoofing
如果您在 php 脚本中有完美的验证,它也不起作用,不要担心直接访问
if(isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) )
{
//Your response
} else {
//I hate users redirect
}
Ajax是用户访问它们,只是以受控的方式。
如果可以从 Ajax 访问脚本/文件,则无法阻止某人直接访问它们。 您可以设置障碍,例如查找某些标题,但人们可以并且会找到解决此问题的方法。
只要您的代码是安全的,允许直接访问它们就没有危害或危险:)
例如,如果你要让Ajax发出像POST /message/delete?id=1
这样的调用,你最好确保调用方有权删除ID为1的消息。
过滤和验证所有输入,并进行足够的访问检查,您应该与互联网上的任何其他网站一样安全。
为了防止用户直接在浏览器中加载 php 文件,但仍允许 ajax 请求通过,并允许将文件包含在文档中,您可以尝试将以下内容添加到您希望防止直接访问的脚本顶部。
if ( realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {
header( 'HTTP/1.0 403 Forbidden', TRUE, 403 );
die( header( 'location:/403/error/Forbidden' ) );/* change to your error page url etc */
}