-1

在公共视图中阻止 php 页面。但仍然可以被其他页面使用。

嗨,我正在开发一个有 ajax live search(search.php) 的网站,search.php 从另一个 php 页面调用以在数据库中搜索,它工作得很好,问题是 search.php 可以输入在 url 中并显示数据库中的所有数据。我试着用谷歌搜索它,仍然不知道如何解决它。我读过它可以在.htaccess 中完成,也可以通过更改权限来完成......我只是想了解如何正确解决问题。谢谢

4

4 回答 4

1

我将如何做到这一点是通过在表单中​​添加另一个 $_POST 变量..类似于以下内容..

$.post('search.php', {search: 'search term', secret: 'ajax'}, function(r){
  $(insert).html(r)
})

然后在帖子页面..

if(isset($_POST['secret']) && $_POST['secret'] == 'ajax'){
  // do your submitting..
} else {
  // display some kind of error message since the secret post wasnt found
}
于 2012-11-28T01:58:14.753 回答
0

试试这个确保将它放在 search.php 页面的顶部:D

if(basename(__FILE__) == basename($_SERVER['PHP_SELF'])) send_404();

function send_404()
{

    header('HTTP/1.x 404 Not Found');

    print '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">'."\n".

    '<html><head>'."\n".

    '<title>404 Not Found</title>'."\n".

    '</head><body>'."\n".

    '<h1>Not Found</h1>'."\n".

    '<p>The requested URL '.

    str_replace(strstr($_SERVER['REQUEST_URI'], '?'), '', $_SERVER['REQUEST_URI']).

    ' was not found on this server.</p>'."\n".

    '</body></html>'."\n";

    exit;
}
于 2012-11-28T01:56:55.440 回答
0

在 search.php 文件的第一行尝试这样的事情

/***************DO NOT ALLOW DIRECT ACCESS************************************/
if ( (strpos( strtolower( $_SERVER[ 'SCRIPT_NAME' ] ), strtolower( basename( __FILE__ ) ) ) ) !== FALSE ) { // NOT FALSE if the script's file name is found in the URL
  header( 'HTTP/1.0 403 Forbidden' );
  die( '<h2>Forbidden! Access to this page is forbidden.</h2>' );
}
/*****************************************************************************/
于 2012-11-28T01:58:39.640 回答
0

我通过将非登陆 PHP 页面置于公共 html 文件夹之外来解决问题,通常位于公共 html 文件夹上方的 /php 或 /lib 文件夹中。这种假设您的所有登录页面都包含某种形式的引导程序,该引导程序设置您的包含路径以包含 /php 文件夹。

另一个简单的解决方案是让您的登陆 php 文件设置一个值或常量,如果未设置该值,则让您的包含拒绝执行 - 这样您就无法直接执行 php 文件。

索引.php

<?php
define(VALID_REQUEST, 1);
include "include.php"
...

包含.php

<?php
if (!defined(VALID_REQUEST)) { exit; }
...
于 2012-11-28T02:02:33.160 回答