我刚刚开始学习PHP,我一直在ASP.Net开发Web应用程序很长一段时间。我想知道是否有任何PHP特定的安全错误,我应该注意。
所以,我的问题是每个PHP开发人员应该知道的最重要的安全提示是什么?
每个答案请保留一个提示,以便人们可以有效地投票/投票。
答案 0 :(得分:17)
(没有特别的顺序)
编辑:对于“新手”,这是一个基本原因(因为我有时间解释这个):
注册全局变量是一种失常。这是有史以来最终的安全漏洞。例如,如果register_globals打开,则url http://www.yourdomain.com/foo.php?isAdmin=1将$ isAdmin声明为全局变量,不需要代码。我不知道为什么这个“功能”让它成为了PHP的方式,但背后的人应该在他们的额头上纹了下面的纹身:“我发明了PHP Register Globals”所以我们可以像害虫一样逃离它们看到他们!
魔术引号是另一个愚蠢的想法,它已经成为PHP的方式。基本上,当ON PHP将自动转义引号('变为\'和“成为\”)以帮助SQL注入攻击。这个概念并不坏(有助于避免注入攻击),但是逃避所有 GET,POST和COOKIE值会使您的代码变得如此复杂(例如,每次显示和数据时都必须浏览)。此外,如果有一天你关闭此设置而不对代码进行任何更改,那么所有代码和/或数据都会被破坏,并且(甚至更多)容易受到注入攻击(即使在你很容易受到攻击时也是如此)。
< / LI>您的数据库数据是您网站上最有价值的内容。你不希望别人搞砸它,所以要记住这一点,保护自己并阅读和代码。
这又可能导致安全问题。错误消息可以提供有关代码如何工作的hackes的提示。此外,这些消息对访问者没有任何意义,为什么要显示它们?
答案 1 :(得分:16)
避免使用register_globals。
警告:自PHP 5.3.0开始,此功能已被弃用,自PHP 5.4.0起已被删除。
答案 2 :(得分:12)
is_uploaded_file()
验证文件是否已上传,move_uploaded_file()
代替copy()
或rename()
。
答案 3 :(得分:8)
这是一个很好的PHP安全编程实践的链接。
大多数安全问题都围绕着用户输入(自然地),并确保它们不会让你烦恼。务必确保验证输入。
http://htmlfixit.com/cgi-tutes/tutorial_PHP_Security_Issues.php
答案 4 :(得分:7)
display_errors
答案 5 :(得分:5)
不要使用“注册全局变量”并过滤用户输入的xss和注入
答案 6 :(得分:5)
语言与程序员。您可以编写最严重的漏洞,但不会收到警告或错误消息。漏洞可以像在代码中添加或删除2个字符一样简单。有数百种不同类型的漏洞会影响PHP应用程序。大多数人都会想到XSS和Sql Injection,因为它们是最受欢迎的。
阅读OWASP top 10。
答案 7 :(得分:4)
如果您使用的是mysql数据库,请确保在向数据库发送数据时调用mysql_real_escape_string
答案 8 :(得分:3)
有很多安全预防措施。我可以推荐一本书Chris Shiflett:PHP和Web应用程序安全性。
答案 9 :(得分:2)
答案 10 :(得分:2)
PHPSec Guide提供了一个很好的概述。
答案 11 :(得分:1)
OWASP提供了很多关于当前应用程序中最大问题的安全问题的见解。很高兴看到他们有一个PHP专用页面
答案 12 :(得分:1)
与PHP相关的大多数安全问题都来自使用未解析的“外部”(GET / POST / COOKIE)变量。人们将这种数据直接放入文件路径或SQL查询中,导致文件泄漏或sql注入。
答案 13 :(得分:1)
答案 14 :(得分:1)
尽可能使用准备好的语句(tutorial。在处理用户输入时几乎是必须的(我说“差不多”,因为有一些用例不起作用),即使不是处理输入,他们会让你养成习惯。更不用说它们可以带来更好的表现,而且一旦你进入了事物的变化,就会比零碎的消毒更容易。
答案 15 :(得分:0)
通常,入门教程根本不讨论检查用户的数据。与所有编程环境一样,永远不要相信您从用户那里获得的数据。学习使用is_numeric()
,isset()
和mysql_real_escape_string()
等功能来保护您的系统。
还有一些功能可以让您访问远程文件和其他创意内容。在你清楚地了解它们是如何以及何时工作之前我会避免使用它们(通常由于安全原因它们被禁用)。
答案 16 :(得分:-1)
使用POST方法将数据从一个页面传递到另一个页面。
在获取trim($_POST)
等数据时使用trim。
另外,在传递查询之前,请对变量使用strip_tags
。
我建议您使用任何框架链接Codeigniter,Laravel,YII,Cake PHP因为他们的佣金框架与所有证券
我推荐Codeigniter用于小型项目,而Laravel用于大型项目。
答案 17 :(得分:-2)
始终使用POST而不是GET用于重要数据......