我刚开始学习PHP的,我一直在开发在ASP.Net Web应用程序很长一段时间。 如果有,我应该寻找出任何具体的PHP的安全错误我想知道。
所以,我的问题是什么,每一个PHP开发人员应该知道的顶级安全提示?
请随时给每一个答案提示,使人们可以有效表决向上/向下。
我刚开始学习PHP的,我一直在开发在ASP.Net Web应用程序很长一段时间。 如果有,我应该寻找出任何具体的PHP的安全错误我想知道。
所以,我的问题是什么,每一个PHP开发人员应该知道的顶级安全提示?
请随时给每一个答案提示,使人们可以有效表决向上/向下。
(在没有特定的顺序)
编辑:对于“新手”在那里,这是一个基本的原因(因为我有时间来解释这一点):
注册全局变量是像差。 这是最终的安全漏洞不断。 例如,如果register_globals的是,该URL http://www.yourdomain.com/foo.php?isAdmin=1将宣布$ isAdmin与无需任何代码的全局变量。 我不知道为什么这个“功能”取得了它的方式到PHP,但是这背后的人应该有自己的额头以下纹身:“我发明了PHP注册全局变量”,所以我们可以逃离他们像害虫,当我们看到他们!
魔术引号是取得了它的方式到PHP另一个愚蠢的想法。 基本上,当PHP会自动转义引号(“成为\”和‘成为\’),以帮助SQL注入攻击。 这个概念是不坏(有助于避免注入攻击),但逃避所有的 GET,POST和COOKIE值使你的代码这么多复杂的(例如,具有显示和数据时,每次取消转义)。 另外,如果有一天你将此设置切换OFF没有做任何改变你的代码,所有的代码和/或数据被破坏,(甚至更多)容易受到注入攻击(是的,即使你是脆弱的)。
你DATABSE数据是你的网站上的最有价值的东西。 你不希望人们惹它,所以保护自己,并在考虑到这一点读到它和代码的东西。
同样,这可能会导致安全问题。 该错误消息可以在你的代码是如何工作hackes给予提示。 此外,这些消息并不意味着什么给您的访客,那么,为什么让他们?
避免使用register_globals的 。
警告:此功能已被弃用的PHP 5.3.0和去除PHP 5.4.0的。
is_uploaded_file()
来验证文件上传和move_uploaded_file()
代替copy()
或rename()
这里是很好的PHP安全编程实践的链接。
http://phpsec.org/
大多数的安全问题围绕用户输入(自然),并确保他们不要拧你了。 请务必先验证您的输入。
http://htmlfixit.com/cgi-tutes/tutorial_PHP_Security_Issues.php
display_errors
关闭生产 不要使用XSS和注射“注册全局变量”和过滤用户输入
语言Vs的程序员。 你可以写上最严重的漏洞,你不会得到警告或错误信息。 漏洞可以添加或在你的代码去除2个字符一样简单。 有数百种不同类型的漏洞的影响PHP应用程序。 大多数人认为XSS和SQL注入的,因为他们是最流行的。
阅读OWASP十大 。
如果您使用的是mysql数据库确保你打电话mysql_real_escape_string将数据发送到数据库
有吨的安全防范措施。 我可以推荐一本书,克里斯·夏夫利特:PHP和Web应用程序安全性。
http://phpsecurity.org/
看一看在了Suhosin硬化修补程序 ,并检查了,它解决了安全漏洞 。
该PHPSec指南给出了一个很好的概述。
大多数的有关PHP的安全问题都来自未解析使用“外部”(GET / POST / COOKIE)变量。 人们把那种数据直接进入文件路径或SQL查询,导致文件泄露或SQL注入。
OWASP提供了大量的洞察今天是在应用程序中最大的问题安全问题。 我很高兴地看到,他们有一个可用的PHP专用页面
http://www.owasp.org/index.php/PHP_Top_5
只要有可能,使用预处理语句( 教程 。这几乎是必须的,只要用户输入处理(我说“几乎”是因为有一些使用情况下,他们不工作),即使不处理的投入,他们让你在习惯。更何况,他们能带来更好的性能,并轻松了很多,一旦你进入事物的摇摆,不是零碎的消毒。
通常的入门教程不从左右用户检查数据说话了。 像所有的编程环境,永远不要相信从用户那里获得的数据。 了解如何使用功能,如is_numeric()
, isset()
和mysql_real_escape_string()
来保护您的系统。
还有一些功能,使您可以访问远程文件和其他创造性的事情。 我会避免这些,直到你有一个很好的了解如何以及何时他们的工作(他们往往是出于安全原因禁用)。
使用用于使从一个网页到另一个数据POST方法。
而越来越像数据使用修剪trim($_POST)
此外,使用strip_tags
变量您传递到查询之前。
我建议你使用任何框架链接笨,Laravel,YII,蛋糕PHP,因为他们女仆框架,所有证券
我建议笨的小项目和Laravel的大项目。
始终使用POST和GET没有重要数据...