推荐一本PHP程序猿都应该拜读的书

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应用程序时,某些首要考虑是:

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

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

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

  特定利用

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

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

  我最喜欢这本书的地方

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

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

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

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

(0)

相关推荐

  • PHP初学者常见问题集合 修正版(21问答)

    1,如何连接连两个字符串? 答:在php中连接两个字符串可以直接使用"."操作符号,例如$newStr="Zhang"."san",在java中是使用"+"操作符号,不要混淆. 2,如何计算一个字符串的长度? 答:$str="test";$length=strlen($str);即使用strlen(str)函数. 3,如何按照某个分割符拆分一个字符串? 答:使用explode(delim,str)函数,例如

  • 最令PHP初学者们头痛的十四个问题

    [1]页面之间无法传递变量 get,post,session在最新的PHP版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到.当然也可以修改自动全局变量为开(php.ini改为reGISter_globals = On):考虑到兼容性,还是强迫自己熟悉新的写法比较好.  [2]Win32下apache2 用get方法传递中文参数会出错:  test.php?a=你好&b=你也好  传递参

  • PHP初学者最感迷茫的问题小结

    [1]页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到 当然也可以修改自动全局变量为开(php.ini改为register_globals = On):考虑到兼容性,还是强迫自己熟悉新的写法比较好. [2]Win32下apache2 用get方法传递中文参数会出错 test.php?a=你好&b=你也好 传递参数是会导

  • PHP读书笔记_运算符详解

    什么是运算符 什么是运算符?运算符是告诉PHP做相关运算的标识符号.例如,你需要计算123乘以456等于多少,这时候就需要一个符号,告诉服务器,你需要做乘法运算. PHP中的运算符有哪些?PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要是用于进行算术运算的,例如:加法运算.减法运算.乘法运算.除法运算.在PHP中的常用的算术运算符对应下表: PHP中的赋值运算符 PHP的赋值运算符有两种,分别

  • PHP初学者头疼问题总结

    [1]页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到  当然也可以修改自动全局变量为开(php.ini改为register_globals = On):考虑到兼容性,还是强迫自己熟悉新的写法比较好.  [2]Win32下apache2 用get方法传递中文参数会出错  test.php?a=你好&b=你也好  传递参

  • 适合PHP初学者阅读的4本经典书籍

    如果你学过其他的语言,你会发现PHP其实还算简单的.有人说PHP学习适合看手册,但是依然有很多的经典书可以帮助大家入门和提高.以下4本你就可以好好读读. 1.细说PHP (点击下载,即可阅读) PHP入门的经典,内容详实易懂,全面涵盖了web开发的所需的知识内容.是一本从入门到精通PHP技术的首选教材.国内比较良心的快速入门php书籍 2.Head First: PHP & MySQL(中文版) (点击下载,即可阅读) 有大量的实例.图解,以及形式多样的练习,不会罗列一大堆关键字和规则让你昏昏欲

  • 给初学者的30条PHP最佳实践(荒野无灯)

    1,和PHP手册成为好朋友 2,打开Error Reporting Error reporting 在 PHP 开发时是很有帮助的. 你可以在你代码中发现先前你没有发现的错误,因为并不是所有的BUG都会让程序运行不了的.当产品正式使用时,才有必要关掉错误报告,不然顾客看到一堆奇怪的字符不知道那是什么意思. 3,使用IDE IDE (集成开发环境,Integrated Development Environments)对于开发者来说是很有帮助的工具. 荒野在这里推荐netbeans IDE . 4

  • PHP读书笔记整理_结构语句详解

    PHP结构语句顺序结构 顺序结构就像一条直线,按着顺序一直往下执行.我们编写的代码默认都是按照顺序结构执行的. 条件结构之if-else- 条件结构就像一个岔路口,可以向左走,也可以向右走.比如上洗手间,我们知道我们的性 别,这时候我们需要根据洗手间提供的条件,左边男洗手间,右边女洗手间,或者正好相反,其中性别就是这个条件结构的条件.再比如,现在的分数都流行使用 A.B.C来分级,假设考试成绩是93分,可以将其设置为等级A,考试成绩是87,可以将其设置为等级B,这里分数区间即为条件结构中的条件.

  • 10个对初学者非常有用的PHP技巧

    本文介绍一些关于改善和优化PHP代码的提示和技巧,供大家参考,具体内容如下 1.不要使用相对路径,要定义一个根路径 这样的代码行很常见: require_once('../../lib/some_class.php'); 这种方法有很多缺点: 1).它首先搜索php包括路径中的指定目录,然后查看当前目录.因此,会检查许多目录. 2).当一个脚本被包含在另一个脚本的不同目录中时,它的基本目录变为包含脚本的目录. 3).另一个问题是,当一个脚本从cron运行时,它可能不会将它的父目录作为工作目录.

  • 推荐一本PHP程序猿都应该拜读的书

    PHP这几年口碑很差.关于它的"糟糕设计的汇总"和语法上的矛盾有着大量的讨论,但是主要的抱怨通常是安全.很多PHP站点分分钟被黑掉,甚至一些有经验的.有见识的程序员会说,这门语言本身是不安全的. 我总是对此持反对意见,因为有常识性的原因,有如此多的PHP安全违反现象. PHP应用程序经常被黑掉是由于: PHP应用程序太多了. 它易于学习和编写. 糟糕的PHP也容易编写. 就是这么简单.PHP流行好多年了.PHP越是受欢迎,它被发现的漏洞就越多.这些黑客发现的漏洞很少是PHP处理引擎本身

  • 一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)

    松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ,因此在我的书里边就没有多说.但是最近总结小伙伴遇到的问题,感觉很多人对前后端分离开发还是两眼一抹黑,所以今天松哥想和大家聊一下前后端分离以及 Vue.js 的一点事,算是一个简单的入门科普吧. 前后端不分 后端模板:Jsp.FreeMarker.Velocity 前端模板:Thymeleaf 前

  • 值得Java程序猿阅读的书籍

    学习的最好途径就是看书 "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料 2.对着书上的代码自己敲的时候方便 "看完书之后再次提升自我的最好途径是看一些相关的好博文",我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自

  • 搞笑的程序猿:看看你是哪种Python程序员

    不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码,显示出了不同的风格,代码都很简单,有趣.下面让我们一起来看看一个Python程序猿进阶的全过程吧.(偷笑) 编程新手 def factorial(x): if x == 0: return 1 else: return x * factorial(x - 1) //不简单啊,迭代,新手哦. print factorial(6) 一年编程经验(学Pascal的) def factori

  • VSCode程序猿彩虹屁插件rainbow fart体验篇

    最近一款VSCode内置语音插件rainbow fart横空出世,rainbow fart翻译过来就是彩虹屁,该插件的定位就是:真*程序员鼓励师,在您枯燥的编程时刻,它可以根据代码关键字播放贴近代码意义的可爱的女孩子的真人语音,夸你写代码牛逼! 推荐软件:VSCode Rainbow Far(VSCode彩虹屁扩展)v1.2.2 免费最新版 快速安装 目前VSCode的插件商场已经上架这个插件了,因此只需要在插件商场搜索 rainbow fart即可. 插件安装成功后,Ctrl + Shift

  • 程序猿必须要掌握的多线程安全问题之锁策略详解

    一.常见的锁策略 1.1 乐观锁 乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正 式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如 何去做.乐观锁的性能比较高. 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会 上锁,这样别人想拿这个数据就会阻塞直到它拿到锁. 悲观锁的问题:总是需要竞争锁,进而导致发生线程切换,挂起其他线程:所以性能不高. 乐观锁的问题:并不总是能处理

  • 程序猿新手学习必备的Python工具整合

    目录 1. IDLE 使得在 Python 中入门变得非常简单 2. Scikit-learn scikit-learn是一个建立在Scipy基础上的用于机器学习的Python模块 3. Theano Theano是一个较为老牌和稳定的机器学习python库之一 4. Selenium Selenium 是自动化的最佳 python 工具之一 5. Test complete 支持 Web.移动和桌面自动化测试的自动化比较好的Python 工具之一 6. Beautiful soup Beaut

  • 程序猿表白妹子的代码神器

    女生眼中的程序员,身上带着好多标签“直男,宅,不懂浪漫,枯燥…”,但这是因为你还没有了解程序猿,程序猿也可以非常浪漫. 程序猿用代码来表白,把你中意的代码发给她,看她能不能看懂,哈哈哈! 而它们不是一般的代码,它们是文化底蕴与编程技术的完美结合!是程序员表白的巅峰之作!更是突破天际的撩妹绝学! 能看懂的妹子才是真爱,愿意细心品味的妹子值得珍惜! 1. 到生命的尽头,每天爱你多一点 while (life < end) {  love++;} 2. I can't say Hello to the

  • 程序员都不知道C语言中的这些小细节

    既然题目都说了是小细节,一来就介绍细节多没意思啊,先坑坑大家再详细介绍吧,嘿嘿.直接上7个题吧,看看你能做对几个呢? 计算型细节 ①: #include <stdio.h> int main() { char a = 3; char b = 127; char c = a + b; printf("结果是:%d",c); return 0; } 您想想这个题的答案是多少?先不要看后面的答案哦 答案是 -126, 嘿嘿,是不是答错了呢?先不要着急,继续看下面的题 ②: #in

  • 一个合格的程序员应该读过哪些书(偏java)

    很多程序员响应,他们在推荐时也写下自己的评语. 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书. 其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语. 下面就按照各本书的推荐数排列. 1.<代码大全> 史蒂夫·迈克康奈尔 推荐数:1684 "优秀的编程实践的百科全书,<代码大全>注重个人技术,其中所有东西加起来, 就是我们本能所说的"编写整洁的代码".这本书有50页在谈论代码布局

随机推荐