我应该注意哪些安全问题出在PHP(What security issues should I loo

2019-06-17 13:06发布

我刚开始学习PHP的,我一直在开发在ASP.Net Web应用程序很长一段时间。 如果有,我应该寻找出任何具体的PHP的安全错误我想知道。

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

请随时给每一个答案提示,使人们可以有效表决向上/向下。

Answer 1:

(在没有特定的顺序)

  1. 务必确认注册全局变量是OFF
  2. 务必检查魔术引号是OFF
  3. 确保你了解SQL注入攻击
  4. 请关闭错误报告在生产

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

  1. 注册全局变量是像差。 这是最终的安全漏洞不断。 例如,如果register_globals的是,该URL http://www.yourdomain.com/foo.php?isAdmin=1将宣布$ isAdmin与无需任何代码的全局变量。 我不知道为什么这个“功能”取得了它的方式到PHP,但是这背后的人应该有自己的额头以下纹身:“我发明了PHP注册全局变量”,所以我们可以逃离他们像害虫,当我们看到他们!

  2. 魔术引号是取得了它的方式到PHP另一个愚蠢的想法。 基本上,当PHP会自动转义引号(“成为\”和‘成为\’),以帮助SQL注入攻击。 这个概念是不坏(有助于避免注入攻击),但逃避所有的 GET,POST和COOKIE值使你的代码这么多复杂的(例如,具有显示和数据时,每次取消转义)。 另外,如果有一天你将此设置切换OFF没有做任何改变你的代码,所有的代码和/或数据被破坏,(甚至更多)容易受到注入攻击(是的,即使你是脆弱的)。

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

  4. 同样,这可能会导致安全问题。 该错误消息可以在你的代码是如何工作hackes给予提示。 此外,这些消息并不意味着什么给您的访客,那么,为什么让他们?



Answer 2:

避免使用register_globals的 。

警告:此功能已被弃用的PHP 5.3.0和去除PHP 5.4.0的。



Answer 3:

  • 跨站点脚本(XSS) 百科 , 谷歌
  • 跨站请求伪造(XSRF / CSRF) 维基 , 谷歌 (感谢鲁克)
    • 会话固定百科 , 谷歌
  • SQL注入(SQLI) 百科 , 谷歌
  • 关闭在生产环境中的错误信息
  • 保存在目录中,是不是通过网络访问的任何“包括”代码(或拒绝访问或保持它的根目录外)
  • 这里有一个文章,我写了一篇关于以安全的方式存储密码 ,如果你不喜欢走我的话,请在底部的链接。
  • 在我的文章还链接,但这里给出了自己独立的环节,是由麻省理工学院发表了一篇文章叫做DOS下和客户机认证的注意事项网络[PDF]上 。 虽然它的一些信息的(建议使用MD5哈希,一)是有点过时了,因为根本是什么,我们,知道,现在对什么-WE-知道,那么,整体原则是非常强的,应该予以考虑。
  • 一个白嘴鸦链接让我想起的限制,另一组重要
    • 关闭注册全局(这是现在是默认的,所以我从来没有提到它)
    • 当文件上传处理,一定要使用is_uploaded_file()来验证文件上传和move_uploaded_file()代替copy()rename()
      • 阅读PHP手册的这一部分 ,如果你需要知道为什么(你这样做)。
  • 既然我现在已经提到了他两次,退房鲁克斯的答案 ( https://stackoverflow.com/questions/2275771/what-are-the-most-important-safety-precautions-that-a-php-developer-needs-方知#2275788 ),因为它包含一个链接到包含(非PHP专用)上的最重要的安全问题(这可能因此正确答案)信息的文档。


Answer 4:

这里是很好的PHP安全编程实践的链接。

http://phpsec.org/

大多数的安全问题围绕用户输入(自然),并确保他们不要拧你了。 请务必先验证您的输入。

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



Answer 5:

  1. 始终消毒和验证从页面传递的数据
  2. 在#1的同时,始终以正确逃不过你的输出
  3. 务必关闭display_errors关闭生产
  4. 如果使用DB后端使用支持/驾驶模拟预处理语句并在不影响使用:-)


Answer 6:

不要使用XSS和注射“注册全局变量”和过滤用户输入



Answer 7:

语言Vs的程序员。 你可以写上最严重的漏洞,你不会得到警告或错误信息。 漏洞可以添加或在你的代码去除2个字符一样简单。 有数百种不同类型的漏洞的影响PHP应用程序。 大多数人认为XSS和SQL注入的,因为他们是最流行的。

阅读OWASP十大 。



Answer 8:

如果您使用的是mysql数据库确保你打电话mysql_real_escape_string将数据发送到数据库



Answer 9:

有吨的安全防范措施。 我可以推荐一本书,克里斯·夏夫利特:PHP和Web应用程序安全性。

http://phpsecurity.org/



Answer 10:

看一看在了Suhosin硬化修补程序 ,并检查了,它解决了安全漏洞 。



Answer 11:

该PHPSec指南给出了一个很好的概述。



Answer 12:

大多数的有关PHP的安全问题都来自未解析使用“外部”(GET / POST / COOKIE)变量。 人们把那种数据直接进入文件路径或SQL查询,导致文件泄露或SQL注入。



Answer 13:

OWASP提供了大量的洞察今天是在应用程序中最大的问题安全问题。 我很高兴地看到,他们有一个可用的PHP专用页面

http://www.owasp.org/index.php/PHP_Top_5



Answer 14:

  1. 始终贴近你的SQL连接。
  2. 总是版本的SQL结果。
  3. 经常擦洗您将放入一个数据库中的所有变量。
  4. 当delete一个或万一从SQL使用限制1下降。
  5. 当开发确保你有事情上的锁,以保持不可取的。 如果它打开,你不知道现在加载页面,因为它可以打破一些东西,并不意味着其他人做。
  6. 不要使用管理员或根为您的服务器登录名。


Answer 15:

只要有可能,使用预处理语句( 教程 。这几乎是必须的,只要用户输入处理(我说“几乎”是因为有一些使用情况下,他们不工作),即使不处理的投入,他们让你在习惯。更何况,他们能带来更好的性能,并轻松了很多,一旦你进入事物的摇摆,不是零碎的消毒。



Answer 16:

通常的入门教程不​​从左右用户检查数据说话了。 像所有的编程环境,永远不要相信从用户那里获得的数据。 了解如何使用功能,如is_numeric()isset()mysql_real_escape_string()来保护您的系统。

还有一些功能,使您可以访问远程文件和其他创造性的事情。 我会避免这些,直到你有一个很好的了解如何以及何时他们的工作(他们往往是出于安全原因禁用)。



Answer 17:

使用用于使从一个网页到另一个数据POST方法。

而越来越像数据使用修剪trim($_POST) 此外,使用strip_tags变量您传递到查询之前。

我建议你使用任何框架链接笨,Laravel,YII,蛋糕PHP,因为他们女仆框架,所有证券

我建议笨的小项目和Laravel的大项目。



Answer 18:

始终使用POST和GET没有重要数据...



文章来源: What security issues should I look out for in PHP
标签: php security