我刚开始学习PHP,我一直在ASP.Net开发Web应用程序很长一段时间.我想知道是否有任何PHP特定的安全错误,我应该注意.
所以,我的问题是每个PHP开发人员应该知道的最重要的安全提示是什么?
每个答案请保持一个提示,以便人们可以有效地上/下投票.
Ale*_*exV 17
(没有特别的顺序)
编辑:对于"新手",这是一个基本的原因(因为我有时间解释这个):
注册全局变量是一种失常.这是有史以来最终的安全漏洞.例如,如果启用了register_globals,则网址http://www.yourdomain.com/foo.php?isAdmin=1将声明$ isAdmin作为全局变量,不需要代码.我不知道为什么这个"功能"让它成为PHP的方式,但是这背后的人应该在他们的额头上纹了下面的纹身:"我发明了PHP Register Globals",所以当我们看到它们时我们可以像害虫一样逃离它们!
魔术引用是另一个愚蠢的想法,它使它成为PHP的方式.基本上,当ON PHP将自动转义引号('变为\'和"成为\")以帮助SQL注入攻击.这个概念并不坏(有助于避免注入攻击),但是逃避所有 GET,POST和COOKIE值会使您的代码变得如此复杂(例如,每次显示和数据时都必须进行浏览).另外,如果有一天你关闭此设置而不对代码进行任何更改,那么所有代码和/或数据都会被破坏,并且(甚至更多)容易受到注入攻击(即使在你很容易受到攻击时也是如此).
您的数据库数据是您网站上最有价值的东西.你不希望别人搞砸它,所以保护自己,阅读有关它的东西,并考虑到这一点.
这又可能导致安全问题.错误消息可以提供有关代码如何工作的hackes的提示.此外,这些消息对访问者没有任何意义,为什么要显示它们呢?
Gre*_*reg 16
避免使用register_globals.
警告:自PHP 5.3.0起,此功能已被弃用,自PHP 5.4.0起已被删除.
Der*_*sed 12
is_uploaded_file()以验证文件是否已上传而move_uploaded_file()不是copy()或rename().
这是一个很好的PHP安全编程实践的链接.
大多数安全问题都围绕着用户输入(自然地),并确保它们不会让你烦恼.始终确保验证您的输入.
http://htmlfixit.com/cgi-tutes/tutorial_PHP_Security_Issues.php
display_errors在生产中关闭