在 PHP 中我应该注意哪些安全问题

2022-08-30 13:35:20

我刚刚开始学习PHP,我已经在 ASP.Net 开发Web应用程序很长一段时间了。我想知道是否有任何PHP特定的安全错误,我应该注意。

所以,我的问题是每个PHP开发人员都应该知道的顶级安全提示是什么?

请为每个答案保留一个提示,以便人们可以有效地投票支持/关闭。


答案 1

(排名不分先后)

  1. 始终检查寄存器全局变量是否为 OFF
  2. 始终检查魔术报价是否关闭
  3. 确保您了解 SQL 注入攻击
  4. 关闭生产中的错误报告

编辑:对于那里的“新手”来说,这是一个基本的原因(因为我有时间解释这一点):

  1. 寄存器全局变量是一种异常。这是有史以来最终极的安全漏洞。例如,如果register_globals处于打开状态,则 url http://www.yourdomain.com/foo.php?isAdmin=1 会将 $isAdmin 声明为全局变量,而无需任何代码。我不知道为什么这个“功能”已经变成了PHP,但是这背后的人应该在他们的额头上纹上以下纹身:“我发明了PHP Register Globals”,这样当我们看到它们时,我们就可以像害虫一样逃离它们!

  2. 魔术引号是另一个愚蠢的想法,使它成为PHP的方式。基本上,当ON PHP会自动转义引号('变为\'和“变为\”)以帮助SQL注入攻击。这个概念并不坏(有助于避免注入攻击),但是转义所有GET,POST和COOKIE值会使你的代码变得如此复杂(例如,每次显示和数据时都必须取消scape)。此外,如果有一天您关闭此设置而不对代码进行任何更改,则所有代码和/或数据都将损坏,并且(甚至更多)容易受到注入攻击(是的,即使您处于易受攻击状态)。

  3. 您的数据是您网站上最有价值的东西。你不希望人们搞砸它,所以保护自己,阅读有关它的东西,并在编写代码时考虑到这一点。

  4. 同样,这可能会导致安全问题。错误消息可以向黑客提供有关代码如何工作的提示。此外,这些消息对您的访问者没有任何意义,那么为什么要显示它们呢?


答案 2

避免使用register_globals

警告:此功能自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已被删除。


推荐