【问题标题】:Deny direct url access to php file that is called on ajax拒绝对在 ajax 上调用的 php 文件的直接 url 访问
【发布时间】:2013-04-17 02:28:46
【问题描述】:

我正在尝试拒绝对在 ajax 上调用以进行表单验证的 php 文件的直接 url 访问。我目前拥有的代码在表单验证之前一直有效,然后它就不起作用了。我不想使用 .htaccess。

当前代码:

<?php

$url = strtolower(basename($_SERVER['PHP_SELF'])); // Gets url (parent that uses the include)
$fil = strtolower(basename(__FILE__)); // gets filename (the included file)
if ($url == $fil){
    // if they are the same (file is accessed through url
    // redirect to forbidden page
    header("HTTP/1.0 403 Forbidden");
    exit;
}
// require my configuration
require_once("config.php");
// code to be executed for ajax validation
$username = $_POST['username'];
$conn = mysql_connect(DB_HOST,DB_USER,DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME,$conn) or die(mysql_error());

$query = mysql_query("SELECT * FROM " . TB_USER . " WHERE username = '{$username}'",$conn) or die(mysql_error());
$result = mysql_num_rows($query);

mysql_close($conn);

if ($result == 0){
    echo "true";
}else{
    echo "false";
}
?>

如果我直接从 url 访问文件,它会按计划重定向,但是当通过 ajax 验证表单时,如果用户名不可用,它不会做任何事情。取出前两行代码($url,$fil)以及 if 语句使 ajax 验证工作,但页面在 url 访问时不会被拒绝。有什么建议可以从这里开始吗?

【问题讨论】:

标签: php ajax url


【解决方案1】:

这样做没有意义。它不会增加任何实际的安全性。

所有表明通过 Ajax 发出请求的标头(如 HTTP_X_REQUESTED_WITH)都可以在客户端伪造。

如果您的 Ajax 提供敏感数据或允许访问敏感操作,则需要添加适当的安全性,例如登录系统。

【讨论】:

  • 我并不是真的在寻找安全性,我只是不希望页面可见,因为它所做的只是写入页面:真或假,取决于用户是否存在。这只是我正在进行的一个有趣的项目,如果我认为结果非常好,那么我将更改我的代码以确保安全。现在,它只是托管在我的本地服务器上:)
  • 之所以这么说是因为很多人实际上认为他们可以在严肃的项目中用它来代替真正的安全性......
  • 我知道,如果我真的想要一些安全的东西,我会确定它是否,例如,在存储密码时,我选择了一个随机数,它会在 md5 和 sha1 中循环多次直到达到那个数字。
  • 如果不是为了安全,你为什么要关心?他们可以加载它,就像他们可以加载你的 JS 和 CSS 一样,因为这就是网络的工作方式。
  • 我喜欢尝试不同的技术,扩展我的编程语言知识。
【解决方案2】:

使用这个:

if(!$_SERVER['HTTP_X_REQUESTED_WITH'])
{
   header("HTTP/1.0 403 Forbidden");
   exit;
}

在所有现代浏览器中,如果使用 AJAX 访问页面,PHP 会将此标头添加到请求中。如果您的页面正在被调用并且此标头不存在,则很有可能直接调用它(或通过超链接或其他方式重定向到它的另一个页面)。基本上这总是显示禁止页面,除非该页面是使用 AJAX 调用的。

【讨论】:

  • 太棒了。我不知道该功能。坚决地把它记在我的笔记里。
  • @Vince 请记住,标头可以被欺骗。然而,目前这是检查标头以检查它是否是(潜在的)ajax 请求的方法之一。
猜你喜欢
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
相关资源
最近更新 更多