如何在我的JavaScript文件和php文件之间建立桥梁代码以保护MySQL信息?

Som*_*one 5 javascript php apache

我有四个文件。

  1. 具有使用MySQL数据库的搜索功能的index.php“主页”。然后我将数据库调用javascript,客户端调用。
  2. “ fetch.php”包含MySQL连接信息。
  3. bridge.php涵盖了提取文件,而我正在使用php代码进行连接。
  4. .htaccess文件以阻止直接访问fetch.php文件。

index.php <---> bridge.php <---> fetch.php <---> Mysql

我的index.php文件包含以下代码,并且因为我使用的是JavaScript!.htaccess文件阻止了index.php文件访问我的fetch.php文件,javascript是“客户端”

<script>
$(document).ready(function(){

    function load_data(query)
    {
        $.ajax({
            url:"bridge.php",
            method:"post",
            data:{query:query},
            success:function(data)
            {
                $('#result').html(data);
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

因此,我将我的javascript代码称为bridge.php文件,并将bridge.php文件称为fetch.php文件抛出了PHP语言,以完成所有这些工作。

所以我的bridge.php文件代码:

<?php
include 'fetch.php';
?>
Run Code Online (Sandbox Code Playgroud)

现在没有人可以直接访问fetch.php .htaccess文件阻止任何直接连接抛出浏览器,但是如果我调用bridge.php文件抛出浏览器,它将打开数据库!那什么都解决不了!我做错了什么?

这是我的.htaccess文件的代码:

<Files ~ "fetch.php">
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Files>
Run Code Online (Sandbox Code Playgroud)

这就是我的提取文件如何调用MySQL:

$connect = mysqli_connect("localhost", "example.com", "passowrd", "databasename");
$output = '';
if(isset($_POST["query"]))
{
    $search = mysqli_real_escape_string($connect, $_POST["query"]);
    $query = "
    SELECT * FROM tbl_customer 
    WHERE CustomerName LIKE '%".$search."%'
    OR Address LIKE '%".$search."%' 
    OR City LIKE '%".$search."%' 
Run Code Online (Sandbox Code Playgroud)

Tig*_*ger 1

我认为你把问题过于复杂化了,或者你的写作fetch.php方式没有帮助。

我猜你fetch.php有 MySQL 函数或类代码,然后你可以访问和使用。就像是:

<?php

define('MYSQL_SERVER','localhost');
define('MYSQL_LOGIN','mylogin');
... and more ...

class DB {
   ... methods ...
}
?>
Run Code Online (Sandbox Code Playgroud)

的关键部分fetch.php应该是开头<?php和结尾?>

如果您(或任何其他人)直接请求fetch.php,您的代码应该以结果是完全空白页面的方式编写。

Web 服务器上的唯一开销是单个 PHP 传递,然后它将向浏览器呈现空白返回。

如果您以其他方式编写代码,我建议您重新考虑您的方法并质疑为什么您这样做。

顺便说一句,.htaccess只有在没有其他方法的情况下才应向文件添加详细信息。就 Web 服务器性能而言,它们不是一个好主意

编辑:

如果您确实想确保fetch.php不直接调用而仅包含在另一个文件中,您可以在顶部执行类似以下操作:

<?php

if (count(get_included_files()) == 1) {
    // direct request, do nothing
    exit;
    // or even redirect somewhere like
    header("Location: /");
    exit;
}

// has been included, allow rest of script to process
$connect = mysqli_connect("localhost", "example.com", "passowrd", "databasename");
// ... more code below
Run Code Online (Sandbox Code Playgroud)