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

Vin*_*nce 2 php ajax url

我试图拒绝直接url访问一个调用ajax进行表单验证的php文件.我目前的代码一直工作,直到表单验证,然后它不起作用.我不想使用.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";
}
?>
Run Code Online (Sandbox Code Playgroud)

如果我直接从url访问该文件,它会像计划的那样重定向,但是当通过ajax验证表单时,如果用户名不可用,它就不会执行任何操作.取出前两行代码($ url,$ fil)以及if语句使得ajax验证工作,但是在url访问时不会拒绝页面.关于该怎么做的任何建议?

rai*_*ace 6

用这个:

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

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