PHP 应用程序的安全提示

2025-05-26

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 = Offdisplay_startup_errors = Off。如果仍要捕获错误进行调试,请打开log_errors = 1error_log = /var/log/php-error.log。您可以将错误日志设置为任何文件路径,甚至可以将其设置为操作系统级别的日志服务。

3. 使用 password_hash 存储你的密码

众所周知,永远不要以纯文本形式存储密码。然而,许多框架仍然使用不安全的哈希算法来转换密码(我正在研究 WordPress)。您可能会看到一些旧文章建议在 PHP 中使用md5hash函数对密码进行哈希处理。千万不要使用它们!在 PHP 中,对函数进行哈希处理的最佳方法是使用password_hash函数。您可以像这样使用它:

<?php

$hash = password_hash('iamapassword', PASSWORD_DEFAULT);
if (password_verify('iamapassword', $hash)) {
    echo "The hash matches!\n";
}
Enter fullscreen mode Exit fullscreen mode

密码哈希函数接受纯文本密码和算法类型(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
PREV
编程时展现善意
NEXT
面向 PHP 开发人员的 Go 入门