虽然 PHP 是一种非常强大的措辞,但如果利用不当,它也可能非常不屈安。在本文中,我们将谈论 PHP 安全性的八个最佳实践,它们将有助于保护您的网站免受黑客和恶意用户的侵害。
PHP 安全的 8 个最佳实践1.始终利用最新版本的PHP
首先,请始终确保您的 PHP 是最新的!
新版本的 PHP 会定期发布,个中包含安全修复和改进,因此通过利用最新版本,您将受益于这些修复和改进以及可能对您的网站有帮助的任何新功能。查看随附的链接以获取最新版本和旧版本的列表:PHP: Releases。
信不信由你,大多数安全漏洞都来自缺点配置。您可以对 PHP.ini 文件进行一些变动以使其更安全,但首先,让我们从须要针对您的特定系统进行定制的以下设置开始:

会话.save_path
session.cookie_path(例如/var/www/mysite)
session.cookie_domain
精确配置这些设置后,您可以编辑其他一些设置以确保 PHP 运用程序的安全。让我们看看下面的清单:
expose_php = off这限定了在 HTTP 标头中发送 PHP 版本的表露。启用后,expose_php 会见告所有人 PHP 已安装在该特定做事器或系统上,个中包括 HTTP 标头中的 PHP 版本,例如(技能支持:PHP/8.1.2)。您可以为任何系统实行此操作,并且如果您利用的是 nginx,则效果很好。
allow_url_include=off将此设置为关闭可防止远程代码实行攻击。
display_errors = off这显示是否该当在屏幕上向访问该站点的每个人打印缺点。作为最佳安全实践,这该当被禁用。
session.cookie_httponly = 1将此设置为 1 将禁用通过 Javascript API 访问 cookie,但请谨慎利用,由于你可能会毁坏某些东西
session.use_strict_mode = 1将此设置为 1 可防止会话固定攻击
session.cookie_secure = 1这哀求 cookie 只能通过 HTTPS 严格传输
session.cookie_samesite = Strict将此设置为严格可防止跨源攻击
session.use_trans_sid = 0这不是必需的,因此将其设置为零
session.sid_length = 128在这里,我们设置会话字符串的长度以防止暴力攻击
session.sid_bits_per_character = 6这增加了会话字符串的随机性,也防止了暴力攻击
file_uploads=off在这里,我们禁用文件上传。如果有人须要上传文件,您可以通过实行 upload_max_filesize = 1M 来设置文件大小的限定
3. 利用最新的代码依赖、第三方组件,并更新您的网络做事器!除了利用最新版本的 PHP 之外,您还该当使您的代码和 Web 做事器保持最新!
这包括您正在利用的任何第三方库或框架。过期的软件每每是攻击的目标,由于黑客知道它更有可能存在可被利用的漏洞。您要确保只安装了必要的库并且所有内容都是最新的。如果您利用 Apache Web 做事器,那么这里有一些常见的最佳实践:
我们最喜好的做法之一是安装 mod_evasive,由于它可以帮助您的做事器在发生攻击时保持运行。另一个是利用 SSL 证书。如果您利用的是 Apache Web 做事器或任何其他做事器,那么拥有 SSL 证书很主要,由于它会在收到包含主机标头的 HTTP 要求之提高行 SSL 握手。终极,它为在线通信供应了更高的安全性。
4. 不要利用可逆加密存储密码可逆加密之以是有害,有几个关键缘故原由。首先,它很随意马虎被破解和解密,使您的数据随意马虎被盗或暴露。其次,它可用于监视或跟踪您的活动,由于加密和解密过程会留下清晰的活动痕迹。末了,它还可以用于列举所有其他用户密码,条件是有一个静态密钥用于加密和解密过程。
相反,您该当利用强大的哈希算法对密码进行哈希处理,例如 bcrypt、利用 openssl 的 AES 双向加密,乃至是得到密码哈希奖的 Argon2。利用散列算法比加密算法更不随意马虎受到攻击。由于查找明文(解密)等价物须要强大的打算能力,这使得它们在存储密码或其他敏感数据时更加安全。此外,散列算法比加密算法快得多,使它们更适宜在速率很主要的运用程序中利用。PHP 已经内置了 bcrypt,因此您不必担心下载任何外部依赖项。
5. 不要依赖 cookie 来担保安全Cookie 常日用于存储有关用户的信息,例如他们的登录状态、用户名、偏好乃至敏感信息。但是,cookie 本身并不屈安,很随意马虎被攻击者盗取。如果您须要在 cookie 中存储敏感数据,您该当先对其进行加密。就像密码哈希一样,我们正在添加另一层安全性。您可以利用由 libsodium 供应支持的 halite 等工具,或者如果您想要更多技能,您可以利用 openssl 之类的工具,乃至可以利用带有 CBC 模式加密的 AES 256 位。
6.验证用户输入所有用户输入都应在 PHP 代码处理之提高行验证。这包括输入到表单字段、URL 参数和 JSON 有效负载中的数据。PHP 有 filter_var() 函数来验证变量。我们可以将它的第二个参数设置为不同的值,并利用它来验证电子邮件、URL、整数等,该函数在失落败或输入无效时返回 false。可以不才面的示例中看到实现 filter_var() 函数的方法:
function is_valid_email($email = "")
{
return filter_var(trim($email), FILTER_VALIDATE_EMAIL);
}
7.定期进行安全审计定期安全审核可以帮助识别您网站中的漏洞并在它们被攻击者利用之前修复它们。通过审核您的代码,您
还可以确保它是最新的并遵照 PHP 安全性的最佳实践。此外,它可以帮助您得到更快的相应韶光、更可靠的运用程序性能,并肃清瓶颈,让您的 Web 运用程序面向未来。实行审核可以扫描以下内容,例如:
跨站脚本漏洞 (XSS)跨站要求假造漏洞 (CSRF)SQL注入PHP代码注入Cookie 谢绝做事攻击定时攻击8. 利用 PHP 库PHP 很好地为开拓职员供应了一些功能,这意味着它们为我们供应了可以用来更好地保护我们的运用程序的功能。您可以利用以下内容:
urlencode - 许可编码职员安全地构建有效的 URL。根据 PHP 文档,该函数可用于对将在 URL 的查询部分中利用的字符串进行编码。
<?php
echo '<a href=”mylink?user=', urlencode($userID), '”>';
?>
利用准备好的 SQL 语句,如下所示:
结论 遵照这些最佳实践将帮助您保护 PHP 运用程序免受攻击。请记住,始终保持您的软件处于最新状态,精确配置您的 Web 做事器和 PHP,并确保实行定期安全审核以识别可能已被遗漏的任何漏洞非常主要!