当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我应该在PHP中注意哪些安全问题》经验,为你挑选了7个好方法。

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

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

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



1> AlexV..:

(没有特别的顺序)

    始终检查寄存器全局变量是否为OFF

    始终检查魔术引号是否为OFF

    确保您了解SQL注入攻击

    关闭生产中的错误报告

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

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

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

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

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



2> Greg..:

避免使用register_globals.

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


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

3> Dereleased..:

Cross Site Scripting(XSS)Wiki,Google

Cross Site Request Forgery(XSRF/CSRF)Wiki,Google(感谢Rook)

Session Fixation Wiki,Google

SQL注入(SQLi)Wiki,Google

关闭生产环境中的错误消息

将任何"包含"代码保存在不可通过Web访问的目录中(拒绝访问或将其保留在webroot之外)

这是我写的一篇关于以安全的方式存储密码的文章,如果你不想接受我的话,请查看底部的链接.

在我的文章中也有链接,但在这里给出了它自己的单独链接,麻省理工学院发表了一篇名为"网上客户认证的DO和不做"的论文[PDF].虽然它的一些信息(建议使用MD5哈希,仅为一个)仅仅因为我们现在所知道的与我们所知道的相比已经过时,但整体原则非常强大,应予以考虑.

Rooks的一个链接让我想起了另一套重要的限制

关闭Register Globals(这是现在的默认值,所以我之前没有提到过)

处理文件上传时,请务必使用is_uploaded_file()以验证文件是否已上传而move_uploaded_file()不是copy()rename().

如果您需要知道原因(并且确实如此),请阅读PHP手册的这一部分.

由于我现在两次提到他,请查看Rooks的答案(/sf/ask/17360801/知道#2275788)因为它包含一个文档的链接,其中包含关于最重要的安全问题的(非PHP特定的)信息(因此这可能是正确的答案).



4> Robert Grein..:

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

http://phpsec.org/

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

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


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

5> prodigitalso..:

    始终清理并验证从页面传递的数据

    结合#1,始终正确地逃避输出

    始终display_errors在生产中关闭

    如果使用数据库后端,请使用支持/模拟预准备语句的驱动程序,并在不带偏见的情况下使用:-)



6> antpaw..:

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



7> rook..:

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

阅读OWASP前10名.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有