闲扯php
再次拜读下这本书,确定会有所新的收获。这本书以前送人了,不过忘了给谁了。。。只好下载网上的pdf版原本看了,并写下阅读笔记,内容以原文为主。mysql
前言算法
Web 是互联网的核心,是将来云计算和移动互联网的最佳载体,所以 Web 安全也是互联网公司业务中最重要的组成部分。安全工程师的核心竞争力不在于他能拥有多少个 0day,掌握多少种安全技术,而是在于他对安全理解的深度,以及由此引伸的看待安全问题的角度和高度。sql
注:对于如今我这个菜鸡而言,仍是尽量的学习技术,多挖0day。shell
黑帽子是指那些形成破坏的黑客,而白帽子则是研究安全,但不形成破坏的黑客。白帽子均以建设更安全的互联网为己任。数据库
第一篇 个人安全世界观浏览器
安全评估的过程,能够简单分为 4 个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。安全
Secure By Default 原则、纵深防护原则、数据与代码分离原则、不可预测性原则服务器
第二篇 客户端脚本安全框架
浏览器的同源策略,限制了来自不一样源的 “document” 或脚本,对当前 “document” 读取或设置某些属性。
浏览器沙箱
恶意网址拦截基于黑名单,常见的恶意网址分为两类:一类是挂马网站,一般包含恶意的脚本如 JavaScript 或 Flash,经过利用浏览器的漏洞(包括一些插件、控件漏洞)执行 shellcode,在用户电脑中植入木马;另外一类是钓鱼网站
浏览器的安全以同源策略为基础,加深理解同源策略,才能把握住浏览器安全的本质。
XSS 攻击手法略,XSS的防护是复杂的,流行的浏览器都内置了一些对抗 XSS 的措施,好比 Firefox 的 CSP、Noscript 扩展,IE 8 内置的 XSS Filter 等。HttpOnly 解决的是 XSS 后的 Cookie 劫持攻击。输入检查、输出检查(分析情景正确编码)、处理富文本。
注:XSS 技巧(gainover、mramydnei 等师傅的案例)
浏览器所持有的 Cookie 分为两种:一种是 “Session Cookie”,另外一种 “Third-party Cookie”,前者浏览器关闭失效,后者到了 Expire 时间后失效
CSRF 的防护 Referer Check、Anti CSRF Token
ClickJacking 的防护 frame busting、X-Frame-Options
HTML5 安全
第三篇 服务端应用安全
SQL 注入是基于数据库的一种攻击。不一样的数据库有着不一样的功能、不一样的语法和函数,所以针对不一样的数据库,SQL 注入的技巧也有所不一样。
LOAD_FILE() 文件读取,INTO DUMPFILE() 适用于二进制文件写入,OUTFILE() 适用于文本文件
MySQL UDF 命令执行,版本 5 以后经过 lib_mysqludf_sys 主要函数 sys_eval() 和 sys_exec()
存储过程为数据库提供了强大的功能。在MS SQL Server 和 Oracle 数据库中有大量存储过程可以使用 CALL 或者 EXECUTE 来执行。
EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:'
xp_regread 等能够操做注册表,存储过程自己也可能会存在注入漏洞。
宽字节注入 当MySQL 使用了 GBK 编码时,0xbf27 和 0xbf5c 都会被认为是一个字符。
正确地防护 SQL 注入:使用预编译语句、使用安全的存储过程对抗 SQL 注入、检查数据类型、使用安全你函数
XML 注入
对抗代码注入、命令注入时,须要禁用 eval()、system()等能够执行命令的函数,必定要使用这些函数,则须要对用户的输入数据进行处理。
CRLF 注入 \r\n 这两个字符用于表示换行,其十六进制编码分别为 0x0d、0x0a
注入攻击是应用违背了 “数据与代码分离原则” 致使的结果。两个条件:一是用户可以控制数据的输入;二是代码拼凑了用户输入的数据,把数据看成代码执行了。
PHP CGI 路径解析问题 /test.jpg/xxx.php 会将 jpg 看成 PHP 解析,在 fastcgi 方式下,PHP 获取环境变量 cgi.fix_pathinfo 默认开启,建议关闭
设计安全的文件上传功能:文件上传的目录设置为不可执行、判断文件类型(结合使用 MIME Type、后缀检查等方式)、随机数改写文件名和文件路径、单独设置文件服务器的域名。
认证的目的是为了认出用户是谁,而受权的目的是为了决定用户能作什么。
认证明际上就是一个验证凭证的过程,密码是最多见的一种认证手段,密码必须以不可逆的加密算法,或者是单向散列函数算法,加密后存储在数据库中。
在 Web 应用中,用户登录以后,服务器端一般创建一个新的 Session 跟踪用户的状态。SessionID 用来标识用户身份,通常是加密保存在 Cookie 中,有的网站也会将 Session 保存在 Cookie 中,减轻服务器维护 Session 的压力。
单点登录(SSO)
关于水平权限越权,系统只会验证用户 A 是否输入角色 RoleX,而不会判断用户 A 是否可以访问只属于用户 B 的数据 DataB,所以致使越权访问。对于一个大型的复杂系统来讲,难以经过扫描等自动化测试方法将这些问题所有找出来,其次理解清除不一样业务的不一样需求不容易,系统上线后再来处理数据级访问控制问题,则可能会涉及跨表、跨库查询,对系统的改动较大,同时会影响性能。这些缘由致使没有通用的解决方案,具体问题具体解决。一个简单的数据级访问控制,能够考虑使用 “用户组” 的概念。
常见的加密算法一般分为分组加密算法与流密码加密算法两种,二者的实现原理不一样。
分组加密算法基于 “分组” (block) 进行操做,根据算法的不一样,每一个分组的长度可能不一样。分组加密算法的表明有 DES、3-DES、Blowfish、IDEA、AES 等
流密码加密算法,加密算法表明有 RC四、OPYX、SEAL 等
伪随机数
MVC 框架,将 Web 应用分为三层,View 层负责用户视图、页面展现等工做;Controller 负责应用的逻辑实现,接受 View 层传入的用户请求,并转发给对应的 Model 作处理;Model 层则负责实现模型,完成数据的处理。
第四篇 互联网公司安全运营