PHP这几年口碑很差。关于它的“糟糕设计的汇总”和语法上的矛盾有着大量的讨论,但是主要的抱怨通常是安全。很多PHP站点分分钟被黑掉,甚至一些有经验的、有见识的程序员会说,这门语言本身是不安全的。

  我总是对此持反对意见,因为有常识性的原因,有如此多的PHP安全违反现象。

  PHP应用程序经常被黑掉是由于:

  • PHP应用程序太多了。
  • 它易于学习和编写。
  • 糟糕的PHP也容易编写。

   就是这么简单。PHP流行好多年了。PHP越是受欢迎,它被发现的漏洞就越多。这些黑客发现的漏洞很少是PHP处理引擎本身的,通常是脚本本身的弱点。

  这意味着,当一个PHP应用程序被黑掉的时候,大多数是程序员的错误。对不起,但这是事实。

  你可以和其它web语言一样编写安全的PHP。是时候开始真正探索安全问题了。

  防止PHP hack的最佳防护

  编写安全的PHP代码不是一个对PHP开发者隐藏的、秘密的黑色艺术。但是信心太零散了,你需要花费数周或数月(或不再这么长时间)去收集某些散篇目录或法则的、好的安全实践。甚至只有真的经验才会告诉你它有多重要。

  幸亏Ben Edmunds已经为你做好了。它最近出版了《Building Secure PHP Apps – a Practical Guide》,它是我读过的最好的安全相关的书籍之一,当然也是最好地涵盖了PHP。本文我将详述为什么我认为每个PHP开发者应当阅读。

  本书是个简明指导,把你带到做为一名开发者的下一个等级,让你打造更好、更安全的脚本。

  简介

  本书很快就进入了web开发的常识规则:不要相信你的用户,过滤所有输入。从一个小情景开始,跳到了用户能够进入系统的技术方法。第一章的主题有:

  • SQL注入
  • 大量赋值字段
  • 类型转换
  • 过滤输入/输出

  这些都是PHP新手(和一些老手)一直容易忽视的地方。过滤输入被很多人看作是可选的一步,这一章做了大量讨论。

  在阅读过程中,让我想起了多年前我的第一天工作,当时我深挖现存代码,找到了新用户创建脚本的代码:

if ($_POST["isadmin"] == 1) {
// code to set to admin in database
}

  当看到这段代码时,我感到非常恐慌,因为它是一个非常有效的脚本,很容易被一个恶意用户搞定,猜出来并插入一个简单的表单变量,进而访问大约5,000个信用卡卡号和其他的个人信息。

  深挖后我发现如下代码:

$sql = "INSERT INTO database (id,name,...) VALUES (" . $_POST["Name"] . ");"

  我在第一天差不多就走出了那份工作,因为他们正依靠这些可怕的代码。这些代码就在那儿,由你负责改变,一定要避免产生更多。

  本章讨论了像这样的代码为什么是巨大的风险,以及如何修复。

  HTTPS和证书

  这是另一个领域,Ben包含了脚本、故事和一点点幽默,同时也清晰地解释了不太清晰的HTTPS的概念。他解释的方式,甚至你的老板都能理解。

  本书非常全面地描述了证书的工作原理、证书类型以及实现方法,甚至包括如何在Apache或Nginx上部署。

  密码

  本书对于密码、哈希、表查询(lookup tables)和salts做了仔细的解释,这对开发人员创建用户登录系统有着令人难以置信的帮助。

  这是一个甚至在2014年都极度缺乏的领域。我仍然能碰到过存储纯文本的密码或像ROT13加密【注1】来保护他们的愚蠢方法的应用程序。为了让人们使用你的应用程序,以及你的好名声,请不要这样做。

  密码和其它敏感数据应该非常难以获取,甚至有人拿到数据库的所有权限。这本书很全面地包括了,会给你设计更好系统的不错指导。

  身份验证和访问控制

  本书包含的主题非常全面。当你构建新的PHP应用程序时,某些首要考虑是:

  • 谁能够访问哪些资源?
  • 谁能够控制其他用户访问?

  这是考虑应用程序、特别是处理敏感数据的应用程序的重要地方。企业里的相当一部分开发就是致力于此。如果你不正确地建立了身份验证访问控制,最可能发生的就是你让用户感到困扰,并产生了更多的工作。比这更糟糕的是服务器数据缺口 以及/或者 数据毁坏。

  本书很好地覆盖了基础知识,然后它深入到像控制访问文件或应用程序单个页面之类的工作,还有很多供参考的代码示例。

  特定利用

  本书涵盖了一些普通的利用来破坏系统,非常详细地探索了跨站点脚本,它可以说是攻击者利用应用程序的最普通的方法。它解释了不同种类的攻击,以及如何保护自己。

  不错吧?你能够通过这个链接打折购书!

  我最喜欢这本书的地方

  在阅读本书过程中,我真正享受的是,信息是如何以对于初学者和有经验的程序员都有用的方式呈现的。有一系列概念被提出,它们是什么以及如何自我保护。有大量的代码示例,而不像一些技术书籍所具备的“填充码”。

  你可以很快通读本书,因为没有太多内容。新手可以通读本书,检查每个主题,开始看看他们的代码,并作出修正。记住在这个事情上,你需要持续修改。如果你回头看看,一定会为六个月前写的代码感到羞愧,你在做正确的事情。

  更高级的、有经验的程序员可以使用这个指南填补他们的弱点(不管你在这个行当多长时间了,你有弱点的,承认吧),更好地了解他们在工作中使用的系统。例如,这么多年我疯了似的使用身份验证,但是从来没有在本书提到的层面考虑过。

  不管你是谁,你会学到东西的。因此不要看本文了,去买一份拷贝吧!使用这个链接购买是有折扣的!!

  免责声明

  我没有在我的博客做过多评论,因此你可能有一些问题。为清楚起见,我没有为评论收取付费或赔偿。上面的优惠码给我博客的读者在原书价格基础上少4美元,我不会收到钱的。当然为了评论的目的,我收到过本书的促销拷贝。

  我本人认识这个作者,那是我相信本书里的信息、完全信任其指导的原因之一。这几年Ben Edmunds在PHP社区有巨大的影响力,他有着10年的PHP经验,他是PHP用户组在波兰区域的领导者之一,这几年在PHP开源项目做出了巨大的贡献。可以这么说,他知道他的东西,你能够相信这里呈现的信息。

每个PHP开发者都应该看的书的更多相关文章

  1. 自由是有代价的:聊聊这几年尝试的道路 要想生活好,别看哲学书和思想书。简单看看可以,看多了问题就大了。还是要去研究研究些具体的问题。别jb坐在屋子里,嘴里念着海子的诗,脑袋里想康德想的事情,兜里屁都没有,幻想自己是大国总理,去想影帝是怎么炼成的。

    自由是有代价的:聊聊这几年尝试的道路 现在不愿意写过多的技术文章了,一点是现在做的技术比较偏,写出来看的人也不多,二来是家庭事务比较繁多,没以前那么有时间写了.最近,园子里多了一些写经历的文章,我也将 ...

  2. 每个Android开发者都应该了解的资源列表

    前言   这是一篇译文,原文地址Resources every Android developer must know,在译文开头,推荐两篇同样适合于Android开发者阅读的资源列表Android开 ...

  3. C++开发者都应该使用的10个C++11特性

    转载自http://blog.jobbole.com/44015/ 在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛.不过我相信这些新特性当中有一些,应该成为所有C++开 ...

  4. 转载:每个C++开发者都应该使用的十个C++11特性

    这篇文章讨论了一系列所有开发者都应该学习和使用的C++11特性,在新的C++标准中,语言和标准库都加入了很多新属性,这篇文章只会介绍一些皮毛,然而,我相信有一些特征用法应该会成为C++开发者的日常用法 ...

  5. 每个Javascript开发者都应当知道的那些事

    每个Javascript开发者都应当知道的那些事 2015-06-07 前端大全 (点击上方蓝字,可快速关注我们) Javascript是一种日益增长的语言,特别是现在ECMAScript规范按照每年 ...

  6. C++开发者都应该使用的10个C++11特性 转

    http://blog.jobbole.com/44015/// | 分类: C/C++, 开发 | 条评论 | 标签: C++, C语言 分享到: 本文由 伯乐在线 - 治不好你我就不是兽医 翻译自 ...

  7. IOS-每个程序员的编程之路上都应该看这11本书

    国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响.每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加 ...

  8. 开发者都应该使用的10个C++11特性

    摘要: 在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛.不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备.你也许看到过许多类似介绍各种C++11特性的 ...

  9. 有趣的条漫版 HashMap,25岁大爷都能看懂

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

随机推荐

  1. 阿里云无线&前端团队是如何基于webpack实现前端工程化的

    背景 前端经历了初期的野蛮生长(切图,写简单的特效)——为了兼容浏览器兼容性而出现的各种类库(JQUERY,YUI等——mv*(饱暖思淫欲,代码多了,也就想到怎样组织代码结构,backbone,ang ...

  2. django构建blog--建立数据库部分+admin部分(eclipse+pydev)

    本文介绍的是在eclipse+pydev 平台下,利用django 搭建blog的第1部分:建立数据库+admin部分 步骤一:创建myweb项目+blog应用 1. Eclipse下新建一个djan ...

  3. 二分--1043 - Triangle Partitioning

    1043 - Triangle Partitioning PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit:  ...

  4. 类模板的困扰 LNK2019 (转)

    原文地址:http://www.eetop.cn/blog/html/93/493893-14903.html 在使用类模板技术时,可在.h中实现,也可在.h和.cpp中分开实现,若用.h实现,不要在 ...

  5. 【BZOJ】【3163】【HEOI2013】Eden的新背包问题

    多重背包/思路题 多次询问,每次从所有物品中忽略一件,问最大收益…… 这题我用的zyf的一个“暴力”做法,就是先预处理出来g1[i][j]表示1~i号物品花了j块钱的最大价值,g2[i][j]表示i~ ...

  6. JAVA 显示图片的简单源码 分类: Java Game 2014-08-14 10:10 77人阅读 评论(0) 收藏

    此代码的原理就是用JLabel来加载图片,再将JLabel放入JFrame中, package com.mywork; import javax.swing.ImageIcon; import jav ...

  7. matrix_world_final_2012

    B http://acm.hust.edu.cn/vjudge/contest/view.action?cid=98759#problem/B 题意:瓶子侧躺在数轴上,瓶底在xlow,瓶口在xhigh ...

  8. 华农js抢课神器

    又到了华农选课的时候,服务器估计就受不了,每天奔溃几次,这次选课贪心了点,竟然选了5门,好吧,我承认我只中了1门,什么??刚刚换课给同学马上就被人抢了?我来告诉你原因吧,最近发现一位大神写了一份js脚 ...

  9. remoting技术

    转: http://www.cnblogs.com/rickie/category/5082.html

  10. img图片底部出现莫名的下边距问题

    谷歌中这样是解释的: 图片底部的空隙实际上涉及行内元素的布局模型,图片默认的垂直对齐方式是基线,而基线的位置是与字体相关的.所以在某些时候,图片底部的空隙可能是 2px,而有时可能是 4px 或更多. ...