gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:03:39 25 4
gpt4 key购买 nike

我试图拒绝直接 url 访问一个 php 文件,该文件在 ajax 上调用以进行表单验证。我目前使用的代码在表单验证之前一直有效,然后它就不起作用了。我不想使用 .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 访问时不会被拒绝。关于从这里做什么的任何建议?

最佳答案

使用这个:

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

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

关于php - 拒绝直接 url 访问在 ajax 上调用的 php 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com