【问题标题】:Protecting database password in a PHP file?保护PHP文件中的数据库密码?
【发布时间】:2014-07-22 13:55:32
【问题描述】:

我有一个 php 文件,它从我的数据库中检索一些重要数据,现在如果有人通过 URL 访问 php 文件,它会直接显示我不希望发生的数据。 是否可以创建一个密码输入框,它将提示输入数据库密码并将其值分配给$password变量(参见下面的代码) ,这样只有用户输入正确的密码,文件才会与数据库交互?

更新示例代码:

<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM Persons");

while($row = mysqli_fetch_array($result)) {
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}

mysqli_close($con);
?>`

当通过浏览器访问这个 php 文件时,它会显示:

彼得·帕克
格伦·福布斯

我不希望人们直接看到输出!我希望他们先输入密码,让php文件与数据库交互并显示输出!

希望你们这次能抓住我!

【问题讨论】:

  • 一个包含你所拥有内容的 PHP 文件将如何显示任何内容?你有一些有趣的扩展吗?如果您的服务器配置为将所有 .php 文件作为 php 运行,请确保将其称为 .php - 用户将看不到任何内容。如果你称它为 .inc 之类的有趣的东西并包含它,服务器将不知道将其作为 PHP 运行并简单地将其显示为文本。
  • 这听起来像是您的服务器没有解析 PHP 文件或禁用了 PHP...
  • php 被解释后,他们不会在浏览器控制台中看到它
  • 那么您最好创建一个登录系统并使用 WHERE 子句。即使是你最好的朋友也会背叛你;相信我。

标签: php mysql database passwords


【解决方案1】:

Apache(或任何其他服务器)将根据它看到的文件扩展名执行文件,并且它已被告知如何处理。如果没有具体说明,它将仅显示为文本。

如果您的服务器可以正常运行 PHP 文件,您可以包含您喜欢的任何文件名 - 包括扩展名,PHP 将假定它只是 PHP。但是,如果您尝试变得棘手并将其称为.php5.include,并且您尚未将服务器设置为将这些文件类型作为 PHP 运行,它将以简单的文本形式输出给用户。

在您的服务器上正确设置文件类型或使用默认扩展名全部调用它们。

根据您提供的代码:

<?php
$host = "localhost";
$db_name = "NAME_OF_THE_DATABASE";
$username = "root";
$password = "PASSWORD_OF_THE_DATABASE";
?>

输入此确切 URL 的用户将看到总计 NOTHING。这是因为当文件作为 PHP 执行时,它只是简单地分配变量值 - 它永远不会显示它们。

如果该文件未关联为 PHP 可执行文件,您的服务器会将内容原样发送给用户 - 显示您编写的所有代码。

【讨论】:

    【解决方案2】:

    从您的问题中,我了解到您不希望任何人看到密码,所以我认为
    您可以加密您的 php 代码并仍然在服务器上运行它

    使用以下工具

    您绝对可以隐藏/编码/加密 php 源代码,“其他人”可以将其安装在他们的机器上。您可以使用以下工具来实现相同的目标。

    【讨论】:

      【解决方案3】:

      我知道他们不会看到密码,我只是不想让他们看到文件 > 从 MySQL 数据库中检索的内容!!! (上面的代码只是一个例子)

      您想查看.htaccess 然后: http://httpd.apache.org/docs/2.2/howto/htaccess.html

      【讨论】:

        【解决方案4】:

        除非您的文件添加 .php,否则您不应该在屏幕上看到代码,检查扩展名。 我建议你在一个新的 php 文件中分离数据库详细信息,并将其移动到上一级目录中

        HTML 代码:

        <form action="{your url}">
          Please enter you password:<input name="password" type="password" />
          <input type="submit" value="Submit" />
        </form>
        
        PHP code:
        
        $password=$_GET['password'];
        if($password=="1234"){
        
        echo 'correct password';
        
        //and add your code here
        
        }
        

        【讨论】:

          【解决方案5】:

          有很多方法...

          <?php
          if($_GET['token'] != 'a1a2a3a4a5') {
              die('Wrong request!');
          }
          $con=mysqli_connect("example.com","peter","abc123","my_db");
          // Check connection
          if (mysqli_connect_errno()) {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
          }
          $result = mysqli_query($con,"SELECT * FROM Persons");
          
          while($row = mysqli_fetch_array($result)) {
          echo $row['FirstName'] . " " . $row['LastName'];
          echo "<br>";
          }
          
          mysqli_close($con);
          ?>
          

          然后从以下位置访问您的页面:

          http://www.example.com/readdata.php?token=a1a2a3a4a5

          【讨论】:

            【解决方案6】:

            如果我是你(如果我正确理解你的问题)我会使用 htaccess 文件。基本上,您将在要保护的目录中创建两个文件。首先,您将命名为 .htaccess。这就是您在文件名中需要的全部内容。在编辑程序(例如:Notepad++)中打开文件并插入以下代码:

                AuthType Basic  
                AuthName "restricted area"  
                AuthUserFile "the/path/to/the/directory/you/are/in/.htpasswd" 
                require valid-user
            

            您看到的 .htpasswd 是您将创建的第二个文件的文件名。创建该文件(名称为 .htpasswd),然后打开它进行编辑。在该文件中,输入要进入目录的人的用户名。

                JohnDoe
            

            后跟一个冒号。

                JohnDoe:
            

            现在,访问http://www.htaccesstools.com/htpasswd-generator/ 之类的网站并在提供的字段中输入您想要的用户名(只需输入“test”)和密码。提交信息。

            完成此操作后,它将弹出一行格式化的信息。复制冒号后面的乱七八糟的字母并将它们粘贴到您的 .htpasswd 文件中的冒号后面。保存您的工作。

                JohnDoe:$apr1$eBsB98Mg$93ckYxSmT5BBfPqOS5a/6.
            

            现在您已经完成了所有这些操作,当有人访问您网站上的目录时,系统会提示他们提供用户名和密码。如果他们知道,它将让他们进入,然后显示您的 PHP 文件中的内容(您需要确保文件名为 index.php

            希望对你有帮助!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-09-11
              • 1970-01-01
              • 2019-01-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多