PHP这几年口碑不好。关于它的“糟糕设计的汇总”和语法上的矛盾有着大量的讨论,可是主要的抱怨一般是安全。不少PHP站点分分钟被黑掉,甚至一些有经验的、有见识的程序员会说,这门语言自己是不安全的。php
我老是对此持反对意见,由于有常识性的缘由,有如此多的PHP安全违反现象。html
PHP应用程序常常被黑掉是因为:程序员
就是这么简单。PHP流行好多年了。PHP越是受欢迎,它被发现的漏洞就越多。这些黑客发现的漏洞不多是PHP处理引擎自己的,一般是脚本自己的弱点。web
这意味着,当一个PHP应用程序被黑掉的时候,大多数是程序员的错误。对不起,但这是事实。sql
你能够和其它web语言同样编写安全的PHP。是时候开始真正探索安全问题了。数据库
编写安全的PHP代码不是一个对PHP开发者隐藏的、秘密的黑色艺术。可是信心太零散了,你须要花费数周或数月(或再也不这么长时间)去收集某些散篇目录或法则的、好的安全实践。甚至只有真的经验才会告诉你它有多重要。安全
幸好Ben Edmunds已经为你作好了。它最近出版了《Building Secure PHP Apps – a Practical Guide》,它是我读过的最好的安全相关的书籍之一,固然也是最好地涵盖了PHP。本文我将详述为何我认为每一个PHP开发者应当阅读。服务器
本书是个简明指导,把你带到作为一名开发者的下一个等级,让你打造更好、更安全的脚本。app
本书很快就进入了web开发的常识规则:不要相信你的用户,过滤全部输入。从一个小情景开始,跳到了用户可以进入系统的技术方法。第一章的主题有:ide
这些都是PHP新手(和一些老手)一直容易忽视的地方。过滤输入被不少人看做是可选的一步,这一章作了大量讨论。
在阅读过程当中,让我想起了多年前个人第一天工做,当时我深挖现存代码,找到了新用户建立脚本的代码:
1
2
3
|
if
(
$_POST
[
"isadmin"
] == 1) {
// code to set to admin in database
}
|
当看到这段代码时,我感到很是恐慌,由于它是一个很是有效的脚本,很容易被一个恶意用户搞定,猜出来并插入一个简单的表单变量,进而访问大约5,000个信用卡卡号和其余的我的信息。
深挖后我发现以下代码:
1
|
$sql
=
"INSERT INTO database (id,name,...) VALUES ("
.
$_POST
[
"Name"
] .
");"
|
我在第一天差很少就走出了那份工做,由于他们正依靠这些可怕的代码。这些代码就在那儿,由你负责改变,必定要避免产生更多。
本章讨论了像这样的代码为何是巨大的风险,以及如何修复。
这是另外一个领域,Ben包含了脚本、故事和一点点幽默,同时也清晰地解释了不太清晰的HTTPS的概念。他解释的方式,甚至你的老板都能理解。
本书很是全面地描述了证书的工做原理、证书类型以及实现方法,甚至包括如何在Apache或Nginx上部署。
本书对于密码、哈希、表查询(lookup tables)和salts作了仔细的解释,这对开发人员建立用户登陆系统有着使人难以置信的帮助。
这是一个甚至在2014年都极度缺少的领域。我仍然能碰到过存储纯文本的密码或像ROT13加密【注1】来保护他们的愚蠢方法的应用程序。为了让人们使用你的应用程序,以及你的好名声,请不要这样作。
密码和其它敏感数据应该很是难以获取,甚至有人拿到数据库的全部权限。这本书很全面地包括了,会给你设计更好系统的不错指导。
本书包含的主题很是全面。当你构建新的PHP应用程序时,某些首要考虑是:
这是考虑应用程序、特别是处理敏感数据的应用程序的重要地方。企业里的至关一部分开发就是致力于此。若是你不正确地创建了身份验证和访问控制,最可能发生的就是你让用户感到困扰,并产生了更多的工做。比这更糟糕的是服务器数据缺口 以及/或者 数据毁坏。
本书很好地覆盖了基础知识,而后它深刻到像控制访问文件或应用程序单个页面之类的工做,还有不少供参考的代码示例。
本书涵盖了一些普通的利用来破坏系统,很是详细地探索了跨站点脚本,它能够说是攻击者利用应用程序的最普通的方法。它解释了不一样种类的攻击,以及如何保护本身。
在阅读本书过程当中,我真正享受的是,信息是如何以对于初学者和有经验的程序员都有用的方式呈现的。有一系列概念被提出,它们是什么以及如何自我保护。有大量的代码示例,而不像一些技术书籍所具有的“填充码”。
你能够很快通读本书,由于没有太多内容。新手能够通读本书,检查每一个主题,开始看看他们的代码,并做出修正。记住在这个事情上,你须要持续修改。若是你回头看看,必定会为六个月前写的代码感到羞愧,你在作正确的事情。
更高级的、有经验的程序员可使用这个指南填补他们的弱点(无论你在这个行当多长时间了,你有弱点的,认可吧),更好地了解他们在工做中使用的系统。例如,这么多年我疯了似的使用身份验证,可是历来没有在本书提到的层面考虑过。
无论你是谁,你会学到东西的。所以不要看本文了,去买一份拷贝吧!使用这个连接购买是有折扣的!!
我没有在个人博客作过多评论,所以你可能有一些问题。为清楚起见,我没有为评论收取付费或赔偿。上面的优惠码给我博客的读者在原书价格基础上少4美圆,我不会收到钱的。固然为了评论的目的,我收到过本书的促销拷贝。
我本人认识这个做者,那是我相信本书里的信息、彻底信任其指导的缘由之一。这几年Ben Edmunds在PHP社区有巨大的影响力,他有着10年的PHP经验,他是PHP用户组在波兰区域的领导者之一,这几年在PHP开源项目作出了巨大的贡献。能够这么说,他知道他的东西,你可以相信这里呈现的信息。