网络安全-常见漏洞与分析
来源:互联网 发布:网络课程女子礼仪答案 编辑:程序博客网 时间:2024/06/05 22:50
一、SQL注入
(1)注入产生原理
使用用户输入的参数拼凑SQL语句,用户对服务器端代码里的SQL语句可控,使服务器执行恶意的sql命令
http://bbs.pconline.com.cn/topic.jsp?tid=1 ' and 1=2
(2)万能密码
select * from tb_name where name = ' ' or 1=1 - - ' and passwd = ' '
(3)危害
数据库泄露,撞库攻击,法律责任(个人信息泄露)
(4)防御方法
1.绑定变量:使用SqlBuilder
2.使用安全的存储过程
3.检查数据类型
4.使用过滤函数
二、越权操作
(1)平行越权漏洞
只要一个账户即可控制全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。越权漏洞的成因主要是因为开
发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判断。
案例分析:删除帖子时没有判断当前用户是否有权限删除该帖子,导致其他用户的帖子也被删掉了
(2)垂直越权操作漏洞
基于角色的权限管理,又称为“垂直权限管理”。不同角色的权限有高低之分。高权限角色访问低权限角色的资源往往
是被允许的,而低权限角色访问高权限角色的资源往往是被拒绝的。如果低权限角色获得了高权限角色的能力,那么
就发生了“越权访问”
三、跨站脚本攻击(XSS)
(1)简介
恶意攻击者通过某些输入点往Web页面里插入脚本代码,当用户浏览页面或执行某种操作时,就会触发嵌入的脚本代码,从而实现
恶意攻击。
(2)分类
1.存储型XSS(Stored XSS)
存入了数据库,再取出来时导致的xss。
输入:
输出:
2.反射型XSS(Reflected XSS)
案例:在网址url后输入xss代码,如<script>alert(1)</script>,然后访问时导致html页面加载这段代码即可达到弹框效果
3.DOM型XSS(DOM Based XSS)其实也是反射型的一种
严格来说该xss也属于反射型,本文的例子其实也是dom based,是指修改页面的dom对象模型,从而达成攻击,比如
页面使用了document.write\document.writeln\innerhtml等dom方法有可能引起dom based xss
案例:
http://datalib.ent.qq.com/cgi-bin/search?libid=1&keyvalue=aaaaaaa&attr=133&stype=2&tname=star_second.shtml
相关代码:
if("职业1"=="职业1")
document.getElementById("titleshow").innerHTML="按职业检索:aaaaaaa";
传入的keyvalue加上xss攻击:
http://datalib.ent.qq.com/cgi-bin/search?libid=1&keyvalue=\x3Cimg\u0020src=1\u0020onerror=alert(1)
\x3e&attr=133&stype=2&tname=star_second.shtml
经过运行后, titleshow 里的HTML就会变为 <img src=1 onerror=alert(1)> ,从而弹出1。
(3)如何防止跨站脚本攻击(XSS)
1.输出过滤
encodeForHTML:
public static String encodeForHTML(String input) { if (input == null) { return input; } StringBuilder sb = new StringBuilder(input.length()); for (int i = 0, c = input.length(); i < c; i++) { char ch = input.charAt(i); switch (ch) { case '&': sb.append("&"); break; case '<': sb.append("<"); break; case '>': sb.append(">"); break; case '"': sb.append("""); break; case '\'': sb.append("'"); break; case '/': sb.append("/"); break; default: sb.append(ch); } } return sb.toString(); }
encodeForCSS:
public static String encodeForCSS(String input) { if (input == null) { return input; } StringBuilder sb = new StringBuilder(input.length()); for (int i = 0, c = input.length(); i < c; i++) { char ch = input.charAt(i); // check for alphanumeric characters if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9') { sb.append(ch); } else { // return the hex and end in whitespace to terminate sb.append('\\').append(Integer.toHexString(ch)).append(' '); } } return sb.toString(); }
encodeForJavascript:
public static String encodeForJavascript(String input) { if (input == null) { return input; } StringBuilder sb = new StringBuilder(input.length()); for (int i = 0, c = input.length(); i < c; i++) { char ch = input.charAt(i); // do not encode alphanumeric characters and ',' '.' '_' if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9' || ch == ',' || ch == '.' || ch == '_') { sb.append(ch); } else { String temp = Integer.toHexString(ch); // encode up to 256 with \\xHH if (ch < 256) { sb.append('\\').append('x'); if (temp.length() == 1) { sb.append('0'); } sb.append(temp.toLowerCase()); // otherwise encode with \\uHHHH } else { sb.append('\\').append('u'); for (int j = 0, d = 4 - temp.length(); j < d; j ++) { sb.append('0'); } sb.append(temp.toUpperCase()); } } } return sb.toString(); }
isValidURL:
public static boolean isValidURL(String input) { if (input == null || input.length() < 8) { return false; } char ch0 = input.charAt(0); if (ch0 == 'h') { if (input.charAt(1) == 't' && input.charAt(2) == 't' && input.charAt(3) == 'p') { char ch4 = input.charAt(4); if (ch4 == ':') { if (input.charAt(5) == '/' && input.charAt(6) == '/') { return isValidURLChar(input, 7); } else { return false; } } else if (ch4 == 's') { if (input.charAt(5) == ':' && input.charAt(6) == '/' && input.charAt(7) == '/') { return isValidURLChar(input, 8); } else { return false; } } else { return false; } } else { return false; } } else if (ch0 == 'f') { if( input.charAt(1) == 't' && input.charAt(2) == 'p' && input.charAt(3) == ':' && input.charAt(4) == '/' && input.charAt(5) == '/') { return isValidURLChar(input, 6); } else { return false; } } return false; }static boolean isValidURLChar(String url, int start) { for (int i = start, c = url.length(); i < c; i ++) { char ch = url.charAt(i); if (ch == '"' || ch == '\'') { return false; } } return true; }
encodeFoURIComponent:
public static String encodeURIComponent(String input) { return encodeURIComponent(input, "utf-8"); } public static String encodeURIComponent(String input, String encoding) { if (input == null) { return input; } String result; try { result = URLEncoder.encode(input, encoding); } catch (Exception e) { result = ""; } return result; }
2.其他方法
A. HTML标签的属性必须使用引号。
B. 页面插入可疑flash时allowScriptAccess必须设置为never。
C. JSON接口返回的Content-Type为application/json。
D. 提供给应用调用的接口数据格式使用JSON。
E. 不要将可疑的数据作为HTML标签属性。
F. 不要将可疑的数据放到CSS属性中。
G. 尽可能避免多层输出。
H. 避免使用Javascript操作cookie。
四、跨站请求伪造(CSRF)
(1)简介
CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为
CSRF或者XSRF,是一种对网站的恶意利用。
(2)发生原因
网站是通过cookie来识别用户的,当用户成功进行身份验证之后浏览器就会得到一个
标识其身份的cookie,只要不关闭浏览器或者退出登录,以后访问这个网站会带上这个cookie。
1.登录受信任网站A,并在本地生成Cookie。
2.如果在用户登录访问网站A的同时访问了网站B,访问者在网站A的数据就会被B使用用户cookie假冒更新。
(3)案例
假如某网银转账操作是以GET请求来完成:http://www.mybank.com/Transfer.php?toBankId=11&money=1000
网站B,它里面有一段HTML的代码如下:
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
当我在网银cookie有效的情况下访问了网站B,那我的网银就莫名其妙的
被转账了1000。。。
(4)防御方法
1.验证码与二次验证
2.对请求的referer进行检测
3.添加随机token校验
五、拒绝服务
(1)CC(Challenge Collapsar)攻击
案例:
http://bbs.pconline.com.cn/abc.jsp?count=100000000&pageSize=100
然后服务器就这样挂掉了啊有木有!!!
(2)防御
1.限制参数大小
2.sql查询性能优化
- 网络安全-常见漏洞与分析
- web漏洞常见分析
- Windows 常见端口漏洞分析
- 常见WEB漏洞原理分析
- 【网络安全】Snort漏洞分析规则提取验证全流程讲述
- 看《网络安全漏洞的罪与罚》有感
- 系统安全分析与设计---网络安全与防火墙
- 网络安全漏洞数据库
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- windows常见漏洞分析(一)
- windows常见漏洞分析(二)
- windows常见漏洞分析(三)
- PHP程序常见漏洞攻击分析
- 模仿小米手环 计步数据的展示View
- fir.im Weekly - 暖心的 iOS 持续集成,你值得拥有
- Ajax基本概念以及JS实现Ajax的过程
- Out of Hay
- 线性表1-顺序表
- 网络安全-常见漏洞与分析
- 正视自己的问题
- linux时间同步
- LINUX : 红帽软件包管理器,YUM仓库
- 机器学习笔记二:线性回归与最小二乘法
- CSS3属性transition(过渡)详解
- 关于merge函数的使用
- 安卓开发之多线程断点下载(三)
- js 封装自己的class类