XSS:跨站式脚本攻击 -- 用户提交的参数中带有恶意JavaScript代码,经过CGI(PHP等)之后输出到页面内容中,被浏览器解析执行而完成的一种攻击。分为反射型XSS和存储型XSS两种!
说明:http://localhost/index.php?name=这里是被恶意嵌入的JavaScript代码,能够获取点击这条链接的用户的cookie并发送到攻击者服务器! <?php $name = $_GET['name']; echo $name; ?> 防止手段: 执行过滤链 1.htmlentities()/htmlspecialchars()(使<script>标签里面的JS代码完全失效+使非<script>标签里面的JS代码部分失效+实体化全部有实体符的字符或者一部分有实体符的字符) 2.自定义函数过滤(使<script>标签中的JS代码失效、使HTML元素on***事件属性失效、使URL中指定的javascript失效) tips: 在网页中运行JavaScript的方式有4种: 1.JS代码放在 <script> 标签中 2.JS代码放在一个js文件中,使用 <script src="**"></script>加载运行 3.元素的on***属性上指定JS代码 4.在需要使用URL的属性中使用 javascript:JS代码
CSRF:跨站式请求伪造 -- 参数是攻击者伪造的,但是却是你在不知情的情况下亲手把这些伪造参数发送到服务器!
发送请求的方式一般有get和post两种 get方式:
POST方式:
解决方法: 1.使用POST请求,增加伪造请求的难度! 2.检测 referer 是否为表单页面 3.生成表单页面时发送token,提交时验证token
SQL注入 -- 在SQL参数中注入另外一条SQL语句
解决方法: 1.使用数据库预处理语句 2.拼接SQL语句前使用 addslashes() 对参数值进行转义
HTTP header 注入攻击 -- HTTP 使用 CRLF(0x0D 0x0A) 分隔头部和内容,所以在头部中使用CRLF分隔,注入一些头部(Set-Cookie)或者js代码同样能够达到注入的目的!一般是将用户输入的内容不加检测地设置为头部的时候发生注入!
解决方法: 1.干掉 CRLF,并且进行严格的正则匹配
Cookie 攻击:由于 cookie 可以被 js 查看(document.cookie),所以cookie信息才会能够通过XSS的方式被盗取,然后盗取者就能够使用这个cookie伪装成合法用户!
解决方法: 给 cookie 加上 HttpOnly 标记,禁止 js 读取!
重定向攻击:一般通过合法网站来伪装自己,通过合法网站的重定向链接跳转到“钓鱼网站”,“钓鱼网站”一般神似正规网站,域名也极度相似,但是却布满了陷阱和地雷!
例如,一个知名网站链接 http://www.example.com/index.php?redirect=***提供了重定向的功能, 而这个链接允许重定向到任意的网站,这样子就很恐怖了!假如“姜太公”(攻击者)有一个钓鱼网站, 就能借助这个知名网站来掩饰自己了, 例如,http://www.example.com/index.php?redirect=http://www.exemple.com/index.php 即时跳转到了 http://www.exemple.com/index.php,不细心也是看不出来的! 解决方法: 1.知名网站链接要添加白名单列表 2.token验证
上传文件攻击
1.要保留上传文件的文件名,但是上传文件的文件名和服务器编码不一样,出现了乱码,而这些乱码恰好是 ***.php ,这就恐怖了! 2.上传文件文件名非法 解决方法: 1.生成随机的文件名,即时要保留文件名,也可以用一个表或者建立映射 2.检测上传文件的后缀