如何安全地将 MySQL 数据库与使用 PHP 的网页链接和使用?

Posted

技术标签:

【中文标题】如何安全地将 MySQL 数据库与使用 PHP 的网页链接和使用?【英文标题】:How can I safely link and use MySQL databases with a webpage using PHP? 【发布时间】:2019-08-09 12:07:43 【问题描述】:

我知道这是一个初学者的问题,但我没有找到任何好的教程/建议,所以 *** 是我最后的希望。

我是编程新手,我正在尝试制作一个使用 mysql 数据库来存储用户数据的网站,例如登录信息、他们在网站中的内容等。

我想知道的是如何安全、可靠地将 MySQL 数据库链接到我的网站并从中获取/发送数据。

现在,我的服务器如下所示:

www 
 |__ public_html (my site html, assets, css and js)
 |__ php (where I think I should put my php files, outside the public http)

php 文件夹中,我有一个config.ini 文件,其中包含数据库的地址、用户名和密码。同样在这个文件夹中,我有一个 .php 文件,看起来像这样:

<?php

function db_connect() 

    static $connection;

    if(!isset($connection)) 
        $config = parse_ini_file('config.ini');
        $connection = mysqli_connect($config['host'],$config['username'],$config['password'],$config['dbname']);

    

    if($connection === false) 
        return mysqli_connect_error();
    
    return $connection;

如何在我的网站中启动此连接并以安全的方式使用它(发送/获取数据),以免受到 SQL 注入的攻击?

编辑:我在一家公司托管我的网站,PHP 版本是 7.2,但我可以更改它。我的root 文件夹中还有更多不是我创建的文件/文件夹,例如.bash_profilephp.ini.gemrc

【问题讨论】:

如果您只要求一种安全的方式,我会将您的问题标记为过于宽泛。 【参考方案1】:

这个问题非常广泛。无论如何,就像其他人所说的那样,您需要将所有文件移动到 public_html 目录中,以便您的网站能够上线并在线运行。

至于您的数据库,您将需要登录到 控制面板或 Plesk 或您使用的任何东西来创建您的数据库用户、密码和其他信息,并确保您为 db 用户分配了所有运行网站所需的必要权限,如插入、更新、删除等。

至于 SQL 注入攻击,您需要为此使用准备好的语句。最好的选择是如果你可以使用 PHP Portable Data Object(PDO)。只要您遵循良好的编码习惯,Mysqli 就很好。 SQL注入在这里详细解释 link.

让我告诉您,在将您的应用程序投入生产之前,您需要了解许多其他威胁和漏洞,否则嗯。

您的 php.ini 文件和 .htacess 文件需要做很多事情。您需要研究如何使用 .htaccess 文件和 php.ini 来保护您的 Web 应用程序。

您需要研究 OWAPS 十大网络漏洞以及如何缓解这些漏洞 OWAPS link

它们是您需要了解的其他一些安全事项才能让您行动起来。请参阅我对一些最佳安全实践的回答 link 您将需要研究错误消息以及如何在生产中禁用它们这只是我能提供的一点点。您还需要更多地研究如何保护 php 上的 Web 应用程序

【讨论】:

【参考方案2】:

您的 .php 文件应该放在 public_html 文件夹中,以便您的网络服务器可以处理它们(默认根文件夹应该是 public_html)。

DB的连接与SQL注入无关,需要注意的是查询字符串。一般的想法是在执行查询之前验证用户的输入。更多详情请关注How can I prevent SQL injection in PHP?

【讨论】:

以上是关于如何安全地将 MySQL 数据库与使用 PHP 的网页链接和使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地将 hadoop 与大型 MySQL 数据库一起使用?

如何最好地将 mysql 数据实现为一行 javascript 代码?

如何安全地将 Backbone.js 应用程序连接到数据库?

安全地将 MS Access 数据库前端连接到 Web 主机上的 MySQL 后端?

安全地将私有 PHP 文件存储在公共目录之上并使用 require_once 加载它们吗?

如何安全地将 script-src 与已知的 JSONP 端点主机(如 syndication.twimg.com)结合起来?