我正在为网络安全课程开发一个小网站项目。在PHP文档上使用mysqli_real_connect的最佳实践是什么?
直接将数据库凭据作为函数的参数编写是一种好方法,还是应该以不同的方式传递它们?
附言:用户看不到源代码,但我想看看是否有我忽略的安全方面。
在源代码中存储数据库凭据总是一个糟糕的主意。不要这样做。如果你的代码中有凭据,那么你就有一个需要解决的问题。
您必须将您的凭据存储在的某个位置,而不是应用程序的web根目录中,这样即使我们的服务器配置严重错误,它们也不会泄漏。
你说";用户看不到源代码";,但这种假设往往是错误的。拙劣的配置可能会禁用PHP,从而将.php
文件呈现为用户可见的纯文本。如果你有一个包含凭据的index.php
,那么你就泄露了这些凭据。您也可能会在无意中错误配置启用了.phps
支持的服务器,这意味着任何人都可以询问任何页面的来源并获得它,并通过漂亮的语法高亮显示完成!
您还可能遇到SQL注入错误使攻击者能够开始从服务器下载任意文件的情况。如果这和你的PHP应用程序是同一台服务器,那么你的状态真的很糟糕。维护数据库和应用程序之间的分离可以在很大程度上帮助。将它们部署在两个不同的虚拟机或容器上。
看看框架建议您如何配置它们。通常有一个单独的配置目录,它甚至不存储在您的版本控制系统中,您也不希望在那里有凭据。