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

Mar*_*own 34 php security

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

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

每个答案请保持一个提示,以便人们可以有效地上/下投票.

Ale*_*exV 17

(没有特别的顺序)

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

编辑:对于"新手",这是一个基本的原因(因为我有时间解释这个):

  1. 注册全局变量是一种失常.这是有史以来最终的安全漏洞.例如,如果启用了register_globals,则网址http://www.yourdomain.com/foo.php?isAdmin=1将声明$ isAdmin作为全局变量,不需要代码.我不知道为什么这个"功能"让它成为PHP的方式,但是这背后的人应该在他们的额头上纹了下面的纹身:"我发明了PHP Register Globals",所以当我们看到它们时我们可以像害虫一样逃离它们!

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

  3. 您的数据库数据是您网站上最有价值的东西.你不希望别人搞砸它,所以保护自己,阅读有关它的东西,考虑到这一点.

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


Gre*_*reg 16

避免使用register_globals.

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

  • 并不难,默认情况下禁用它并在PHP6中删除. (3认同)
  • 你的意思是PHP 7;) (2认同)

Der*_*sed 12

  • Cross Site Scripting(XSS)Wiki,Google
  • Cross Site Request Forgery(XSRF/CSRF)Wiki,Google(感谢Rook)
  • SQL注入(SQLi)Wiki,Google
  • 关闭生产环境中的错误消息
  • 将任何"包含"代码保存在不可通过Web访问的目录中(拒绝访问或将其保留在webroot之外)
  • 这是我写的一篇关于以安全的方式存储密码的文章,如果你不想接受我的话,请查看底部的链接.
  • 在我的文章中也有链接,但在这里给出了它自己的单独链接,麻省理工学院发表了一篇名为"网上客户认证的DO和不做"的论文[PDF].虽然它的一些信息(建议使用MD5哈希,仅为一个)仅仅因为我们现在所知道的与我们所知道的相比已经过时,但整体原则非常强大,应予以考虑.
  • Rooks的一个链接让我想起了另一套重要的限制
  • 由于我现在两次提到他,请查看Rooks的答案(/sf/ask/159304001/知道#2275788)因为它包含一个文档的链接,其中包含关于最重要的安全问题的(非PHP特定的)信息(因此这可能是正确的答案).


Rob*_*ner 8

这是一个很好的PHP安全编程实践的链接.

http://phpsec.org/

大多数安全问题都围绕着用户输入(自然地),并确保它们不会让你烦恼.始终确保验证您的输入.

http://htmlfixit.com/cgi-tutes/tutorial_PHP_Security_Issues.php

  • 问题:phpsec.org最近有什么产生的吗?(2008,9) (3认同)

pro*_*son 7

  1. 始终清理并验证从页面传递的数据
  2. 结合#1,始终正确地逃避输出
  3. 始终display_errors在生产中关闭
  4. 如果使用数据库后端,请使用支持/模拟预准备语句的驱动程序,并在不带偏见的情况下使用:-)


ant*_*paw 5

不要使用"注册全局变量"并过滤用户输入的xss和注入


roo*_*ook 5

语言与程序员.您可以编写最严重的漏洞,但不会收到警告或错误消息.漏洞可以像在代码中添加或删除2个字符一样简单.有数百种不同类型的漏洞会影响PHP应用程序.大多数人都会想到XSS和Sql Injection,因为它们最受欢迎.

阅读OWASP前10名.