允许直接访问PHP文件是否有任何危险


Is there any danger in allowing direct access to PHP files?

我有一堆帮助程序文件和解析器,其中一些是通过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 */
}