PHP 应用程序的安全提示
我知道你们很多人在想什么!PHP 还安全?何必呢?换个编程语言就好了!
与普遍的看法相反,PHP 仍然是一种构建 Web 应用程序的可行语言。PHP 只是您需要学习正确使用的一种工具。让我们讨论一些 PHP 特有的、能够提升网站安全性的技巧。
1. 将 Web 根目录限制为 index.php 和 Asset 文件
在现代 PHP 中,你会将你的 Web 服务器指向一个目录,index.php
其中包含一个文件,该文件将成为整个站点的单一入口点。它将index.php
加载 Composer 软件包并启动你的私有代码来生成响应。你可能想将其他 PHP 文件放入 Web 根目录中进行测试。但是,你肯定不希望这些文件被意外提交,从而暴露你的应用问题。此外,任何配置文件都不应放在 Web 根目录中,因为 Web 服务器可以公开提供它们。你的 Web 根目录中应该只包含 JavaScript、CSS 和图像文件等静态文件。
2.关闭显示错误
php.ini
您可以使用名为 的指令将 PHP 设置为显示执行过程中发生的错误display_errors
。显示的错误可能会泄露有关您应用程序的重要信息,包括机密信息和 SQL 查询。在生产环境中,务必关闭这些功能。在您的php.ini
文件中,设置display_errors = Off
和display_startup_errors = Off
。如果仍要捕获错误进行调试,请打开log_errors = 1
和error_log = /var/log/php-error.log
。您可以将错误日志设置为任何文件路径,甚至可以将其设置为操作系统级别的日志服务。
3. 使用 password_hash 存储你的密码
众所周知,永远不要以纯文本形式存储密码。然而,许多框架仍然使用不安全的哈希算法来转换密码(我正在研究 WordPress)。您可能会看到一些旧文章建议在 PHP 中使用md5
或hash
函数对密码进行哈希处理。千万不要使用它们!在 PHP 中,对函数进行哈希处理的最佳方法是使用password_hash
函数。您可以像这样使用它:
<?php
$hash = password_hash('iamapassword', PASSWORD_DEFAULT);
if (password_verify('iamapassword', $hash)) {
echo "The hash matches!\n";
}
密码哈希函数接受纯文本密码和算法类型(PASSWORD_DEFAULT
比较安全)。该函数返回哈希password_verify
后的密码,您可以在用户登录时使用该函数。密码验证会根据哈希值是否与提交的密码匹配返回 true 或 false。如果您看到一篇文章建议对密码进行加盐处理,不必担心使用password_hash
。该函数会自动为您加盐。
4.加密所有通信
在您的 PHP 应用中,您经常需要与其他服务或存储机制进行通信。务必始终使用加密连接来访问这些服务。使用curl
或 时soap
,务必使用https
指向 API 的 URL 来验证传输中的数据是否已加密。此外,如果您使用 FTP,请确保使用某种形式的安全 FTP,例如 FTPS 或 SFTP。如果您不使用任何安全传输,则可能会在网络活动中泄露用户数据。使用 TLS 还可以验证 URL 的真实性,从而防止您将数据发送给不法分子。
5.使用模板框架
PHP 本身经常被用作嵌入 HTML 文件的模板语言。然而,PHP 默认不会对输出进行转义。转义可以防止恶意攻击者在用户控制的表单或页面中嵌入恶意 JavaScript。建议使用像Twig这样的自定义模板解决方案。Twig 会使用其模板语法自动转义所有输出,从而防止您忘记转义用户数据。
除了这些技巧之外,创建安全网站还有很多其他方法,但希望它们能够提升代码库的整体安全性。我在《打造更安全网站的四个技巧》中介绍了其他网站安全方法。如果您想了解更多,可以查看!
文章来源:https://dev.to/restoreddev/security-tips-for-a-php-application-4e9a