Web 安全 读书笔记
WEB安全笔记
根本原则:数据与代码分离
同源策略
1.当JS被浏览器认为来自不同源是,请求被拒绝。
2.影响同源策略的因素host(域名,IP地址,子域名,端口和协议)。
3.EXCEPT:script . img .iframe . link 标签可跨区加载资源而不受同源策略的影响。(原因是都带着src属性)
攻击手段类型
1.XSS跨站脚本攻击
总的来说就是引用上面描述的不受同源策略影响的标签引入不合法的代码来进行攻击主要有四种
- 反射型XSS
- 存储型XSS
- DOM Based XSS
- XSS Payload Cookie劫持攻击等
2.CSRF Cross Site Request Forgery 跨站点请求伪造
风险在于那些通过基于受信任的输入form和对特定行为无需授权的已认证的用户来执行某些行为的web应用。已经通过被保存在用户浏览器中的cookie进行认证的用户将在完全无知的情况下发送HTTP请求到那个信任他的站点,进而进行用户不愿做的行为。
使用图片的CSRF攻击常常出现在网络论坛中,因为那里允许用户发布图片而不能使用JavaScript。 --百度百科
3.Click Jacking 点击劫持
点击劫持,clickjacking,也被称为UI-覆盖攻击。这个词首次出现在2008年,是由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼首创的。
它是通过覆盖不可见的框架误导受害者点击。
虽然受害者点击的是他所看到的网页,但其实他所点击的是被黑客精心构建的另一个置于原网页上面的透明页面。
这种攻击利用了HTML中iframe标签的透明属性。
4.SQL注入
- 盲注(Blind Injection)
- 攻击存储过程
- 编码问题
- Session劫持 如果SessionID是保存在cookie中的,则这种攻击称为cookie劫持
- Session Fixation(固定) 攻击:在用户登录网站的过程中,如果登陆前后用户的sessionID没有发生变化,则会存在session fixation 问题
预防SQL注入的方式
1.使用预编译语句,绑定变量
2.使用存储过程
3.检查数据类型
4.使用安全函数
5.OAuth(单纯的名词解释)
OAuth 是一个在不提供用户名密码的情况下授权第三方应用访问web资源的安全协议。
6.绕过文件上传检查功能
0x00被认为是终止符
[\0] 为十六进制的0x00字符
会利用上述特性截端字符串为脚本语言。
- 设计安全的文件上传功能
1.文件上传的目录设置为不可执行
2.判断文件类型
3.使用随机数改写文件名和文件路径
4.单独设置文件服务器的域名 - 在加密算法的选择和使用上 有一些建议
1,不要使用ECB模式。
2,不要使用流密码比如RC4.
3,使用HMAC-SHAI 代替MD5(甚至是SHAI).
4,不要使用相同的key做不同的事情。
5,salts与IV需要随机产生。
6,不要自己实现加密算法,尽量使用安全专家已经实现好的库
7,不要依赖系统的保密性。 - 当不知道如何选择时
1,使用CBC模式的AES256用于加密。
2.使用HMAC-SHA512用于完整性检查。
3,使用带salt的SHA-256或SHA-512用于Hashing.
7.DDOS 分布式拒绝服务 Distributed Denial of Service
最主要的便是限制请求频率,比如无限占用http请求,缓慢多次发送http请求。
- Slowloris攻击
以极低的速度往服务器发送HTTP请求,在正常的HPPT包头中,是以两个CLRF(\r\n\r\n)表示HTTP Headers部分结束的。 - HTTP POST DOS
在发送HTTP POST包是,指定一个非常大的Content-Length值,然后以很低的速度发包,比如10~100s发一个字节,保持住这个链接不断开。 - Server Limit Dos
(Apache所能接受的最大HTTP包头大小为8192字节(request header) request body默认最大限制为2GB)超过指定大小服务器会返回一个4xx错误。 - 正则 ReDOS
一种代码实现上的缺陷,正则表达式写的不好,有可能被恶意输入利用,消耗大量资源,从而造成DOS。 - 小结
应用层拒绝服务攻击是传统的网络拒绝服务攻击的一种选择,本质也是对有限资源的无限滥用所造成的,解决这个问题的核心思路就是限制每个不可信任的资源使用者的配额。
8. PHP安全
- 文件包含漏洞
常见的导致文件包含的函数如下:
PHP:include,require,fopen(),readfile();
(PHP内核并不会在意被包含的文件是什么类型)
要想成功利用文件包含漏洞,需要满足下面两个条件:- include()等函数通过动态变量的方式引入需要包含的文件。
- 用户能够控制该动态变量。
- 本地文件包含(LFI)
能够打开并包含本地文件的漏洞,被称为本地文件包含漏洞。
PHP配置设置open_basedir的作用是限制在某个特定目录下PHP能打开的文件,其作用与 safe_mode是否开启无关。 - 远程文件包含
PHP 的配置选项allow_url_include为ON的话,则inlude/require函数是可以远程加载文件的(RFI)。
PHP会为上传文件创建临时文件,其目录在php.ini的upload_tmp_dir中定义,但改值默认为空,此时在Linux下回使用/tmp目录,在Windows下会使用C:\windows\temp目录。
- 变量覆盖漏洞
- 全局变量覆盖
register_globals PHP配置文件 - unset()默认只会销毁局部变量,而要销毁全局变量必须使用$GLOBALS;
- extract()变量覆盖
extract()函数能将变量从数组导入当前的符号表。 - 遍历初始化变量
常见的一些以遍历的方式释放变量的代码,可能会导致变量覆盖(按下不表)。 - import_request_variables 变量覆盖
次函数将GET,POST,Cookie中的变量导入到全局。 - parse_str()变量覆盖
parse_str()函数往往被用于解析URL的query string.
eg.$var = 'init'; parse_str($_SERVER['QUERY_STRING']); print $var;
- 全局变量覆盖
- 防止变量覆盖的安全建议
- 确保register_globals = OFF,若不能自定义php.ini,则应该在代码中控制。
- 熟悉可能造成变量覆盖的函数和方法,检查用户是否能控制变量的来源。
- 养成初始换变量的好习惯。
-
代码执行漏洞
- phpMyAdmin3.4.3.1远程代码执行漏洞
- MyBB 1.4远程代码执行漏洞
挖掘漏洞的过程,通常需要先找到危险函数,然后回溯函数的调用过程,最终看在整个调用过程中用户是否有可能控制输入。 - “文件写入”执行代码
- 其他执行代码方式
- 直接执行代码函数eval(),assert(),exec(),shell_exec()
- 文件包含
- 本地文件写入
- preg_replace()代码执行
preg_replace()的第一个参数如果存在/e模式修饰符,则许代码执行。 - 动态函数执行
- Curly Syntax {}
将执行花括号间的代码,并将结果替换回去。 - 回调函数执行代码
- unserialize()将导致代码执行
- 能将序列化的数据重新映射为PHP变量。
-
定制安全的PHP环境
- register_globals = ON.
- open_basedir = /home/web/html/(指定目录)
- allow_url_include = off
allow_url_fopen = off. - display_errors = off
- log_errors = on
- magic_quotes_gpc = OFF.
- cgi.fix_pathinfo = 0
(如果PHP以CGI的方式安装,则需要关闭此项,以避免出现文件解析问题) - session.cookie_httponly = 1
- session.cookie_secure = 1.
- sefe_mode
- disable_functions 能够在PHP中禁用函数
disable_functions = eg...
9.WEB SERVER 配置安全
主要有五个方面(详略)
1.apache 安全
2.nginx 安全
3.jBoss远程命令执行
4.Tomcat 远程命令执行
5.HTTP Parameter Pollution(通过GET或POST向服务器发起请求时,提交两个相同的参数)入侵检测
常见的安全监控产品有IDS(入侵检测系统),IPS(入侵防御系统),DDOS监控设备。WAF(web应用防火墙)
ModSecurity:Apache的一个Module.他能获取到所有的访问Apache Httpd Server的请求,并根据自己的规则对这些请求进行匹配,以检测那些请求存在攻击行为。
声明:纯手打总结,劳动不易,转载请附上原文链接。谢谢支持
本作品采用《CC 协议》,转载必须注明作者和本文链接
排版可以加强下 :smile_cat:
@Summer 恩恩,本来写好的排版,复制过来后出了点错,又调整了一下,谢谢提醒。
为何下面的是
@to2False 谢谢提醒,以为用了三个markdown编辑器,最开始是有道云,后来是马克飞象最后是cmdmarkdown ,估计标签都不兼容。疏忽了,还望指正排版。因为没有用过markdown排版还不是特别熟练。哈哈。你有好的markdown编辑器推荐吗?
如果有具体的实例就更 nice 了
@mingyun 确实有很多实例,但是太多了,我也记了一些,但是确实很多,就没有加上,只是写了一些大体的意思。肯定不容易理解。例子看情况吧。要是实在需要我就慢慢加上几个也行。谢谢支持
@豆高腾 mac版有个Typora