4
一/09
2

PHP Architect’s Guide to PHP Security [3]

今天继续翻译PHP Architect’s Guide to PHP Security这本书的第三章《SQL注入》。由于第二章XSS有专门的书籍介绍,以后会专门翻译,所以暂时跳过XSS,先对SQL Injection进行介绍。

SQL注入是另一种常见的漏洞(针对XSS来说),是由于对输入数据过滤不严导致的。它不像XSS是直接针对站点的用户,而是直接破坏站点本身,特别是数据库。SQL注入的目的是插入任意数据,常常是插入一条被数据库执行的SQL语句。这些潜伏的被插入语句常常执行很多操作,从获取数据到更改或删除数据库信息。

// supposed input
$name = “ilia’; DELETE FROM users;”;
mysql_query(“SELECT * FROM users WHERE name=’{$name}’”);
这段功能本来是想从user表中获取匹配name字段的数据,一般情况下,name变量是一些字母数字和空白字符的组合,比如字符串“ilia”,但如果我们附加了查询语句,这条注入的查询语句将会删除users表中的所有记录。(幸运的是,mysql的mysql_query函数不允许堆查询,在一次调用中不允许执行多次查询,但是SQLite和postgresql扩展是可以的。

PHP的自动转义机制GPC提供了一些基本保护,如果启用了magic_quotes_gpc,将会对单引,双引等一些字符进行转义(在前面加反斜线)。但是magic quotes不包括所有需要转义的字符,并且这个特性不总是开启的。所以你需要自己用代码来阻止SQL注入。

php的很多数据库扩展有自己专门的转义机制,例如Mysql扩展的mysql_real_escape_string()函数。

if (get_magic_quotes_gpc()) {
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query(“SELECT * FROM users WHERE name=’{$name}’”);
在调用数据库扩展的转义机制之前,首先要对magic quotes的状态进行检查,如果magic guotes启用了,则要去掉它可能添加的反斜线,以免输入数据被转义2次。

待续。。。有点累了。

 

关键字: ,
8
十/08
0

PHP Architect’s Guide to PHP Security [2]

White List Validation (白名单验证)
Being Careful with File Uploads (文件上传时要小心)
File Content Validation (文件内容验证)
Accessing Uploaded Data (访问上传数据)
The Dangers of Magic Quotes (Magic Quotes的危险性)
Magic Quotes Normalization (Magic Quotes正规化)
Validating Serialized Data (验证序列化数据)
External Resource Validation (外部资源验证)

Assumption is the enemy of security and making assumptions about user input is a sure way to allow an attacker to subvert your code. 又一次强调开发者的假设所带来的后果。对开发者来说,普遍假设selection box和check box以及radio button和hidden字段值是不用验证的,这就完全错了,
因为恶意用户可以拷贝html表单代码并且修改后来进行恶意提交任意数据。比起黑名单的概念,我们最好还是选择白名单,也就是说我们给出合法的值,然后验证是否合法;而不是给出不合法的值,验证值是否非法。显然后者不如前者来得安全。这里作者给出一个例子,说明了这个问题:
$months = array(“January”, “February”, /* … */);
if (empty($_POST[‘month’]) || !in_array($_POST[‘month’], $months)) {
   exit(“Quit hacking, you’re not a lumberjack!”);
}

关于文件上传:如果你的应用程序不会使用到文件上传的特性,你可以编辑php.ini文件来禁止文件上传。
file_uploads=off
upload_max_filesize指令可以控制上传的单个文件最大值,以字节为单位。默认值为2M
post_max_size指令限制了当表单以POST方式提交的数据大小。通常情况下,这个值我们应该设置地比上面那个file_uploads稍微大一点点。如果你可能用到多文件上传,根据需要自行调整。默认值为8M。

(待补充。。。)

关键字: ,
26
九/08
7

PHP Architect’s Guide to PHP Security [1]

这几天稍微轻松点,就再看了一次PHP Architect’s Guide to PHP Security这本经典PHP安全书籍。其中整理了一些笔记之类的东西,分享给大家。都是个人组织和翻译的东西,如果有不周到的地方还请广大安全爱好者给出批评和指正。本来想逐字翻译全文,但是这是一个浩大的工程,并且学习意义不大,所以挑选一些重要的内容进行翻译和注释。

200809261133336667

前言和介绍就略过不翻译了,作者描述了一下PHP安全的重要性,以及为何变得如此重要。我想目前线上的很多php站点遭到攻击和破坏足以说明这点了,我们直接来看第一章Input Validation。今天先写前半章吧。(一章内容太多,本人英文比较菜,看完需要差不多3个小时)

关键字: ,
25
十一/07
0

dive into python

pdf格式,下载地址:http://www.woodpecker.org.cn/diveintopython/

网上比较流行的关于python的电子文档有两个,python简明教程和dive into python。前者对python做了一些简要介绍,程序底子不错的朋友看了它基本可以上手写东西了,但是内容比较少。而这本dive into python内容较为详尽,并且介绍python的流程比较特别。一般的程序类书籍,首先是hello world,然后是数据类型和语言逻辑控制,最后是函数和对象以及网络操作等等。而这本书每个章节首先给出一段代码段,然后逐行分析,逐步让读者了解其中的含义,在这个过程中慢慢了解python的各个方面。不失为一个比较高效的学习方法。

相信通读它并且旁边开个编辑器和shell,完后算是一个真正的python入门者了。不要忘记大量的实践啊!

关键字: