Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拒绝对在ajax上调用的php文件的直接url访问_Php_Ajax_Url - Fatal编程技术网

拒绝对在ajax上调用的php文件的直接url访问

拒绝对在ajax上调用的php文件的直接url访问,php,ajax,url,Php,Ajax,Url,我试图拒绝对调用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 incl

我试图拒绝对调用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";
}
?>
使用以下命令:

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

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

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

所有指示通过Ajax发出请求的头(如HTTP\u X\u REQUESTED\u WITH
)都可以在客户端伪造


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

。我不知道这个功能。公然在我的笔记中保留这些内容。@Vince请记住,标题可能会被欺骗。然而,目前这是检查标题以检查它是否是(潜在的)ajax请求的方法之一。我不是真的在寻找安全性,我只是不希望页面可查看,因为它所做的只是写入页面:true或false,取决于用户是否存在。这只是一个有趣的项目,我正在工作,如果我认为它真的很好,那么我会改变我的安全代码。现在,它只是被托管在我的本地服务器上:)只是说,因为很多人实际上认为他们可以在严肃的项目中用它来代替真正的安全性…我知道,如果我真的想要安全的东西,我会确保它,例如,在存储密码时,我选择了一个随机数,它在md5和sha1之间循环了很多次,直到它达到那个数字。如果不是为了安全,为什么你会在意?他们可以加载它,就像他们可以加载你的JS和CSS包含一样,因为网络就是这样工作的。我喜欢尝试不同的技术,扩展我对编程语言的知识。这已经被问过很多次了——屏幕右侧的“相关”框指向我