转载:
http://blog.csdn.net/u011794238/article/details/46419911
跨站脚本就是在url上带上恶意的js关键字然后脚本注入了,跨站伪造用户请求就是没有经过登陆,用超链接或者直接url上敲地址进入系统,类似于sql注入这些都是安全漏洞。
- sql注入
1、参数化查询预处理,如Java使用PreparedStatement()处理变量。
2、转义敏感字符及字符串(SQL的敏感字符包括“exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,”;”,”‘”,”--”,”%”,”0x”,”><=!-*/()|”,和”空格”)。
3、屏蔽出错信息:阻止攻击者知道攻击的结果。
4、在服务端正式处理之前对提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作。
- 跨站脚本
一般性建议:转义或过滤客户端提交的危险字符,客户端提交方式包含GET、POST、COOKIE、User-Agent、Referer、Accept-Language等,其中危险字符如下:
建议转义或过滤以下字符:
[1] |(竖线符号)
[2] & (& 符号)
[3];(分号)
[4] $(美元符号)
[5] %(百分比符号)
[6] @(at 符号)
[7] '(单引号)
[8] ""(引号)
[9] \'(反斜杠转义单引号)
[10] \""(反斜杠转义引号)
[11] <>(尖括号)
[12] ()(括号)
[13] +(加号)
[14] CR(回车符,ASCII 0x0d)
[15] LF(换行,ASCII 0x0a)
[16] ,(逗号)
[17] \(反斜杠)
[18] (空格)
[19] . (点号)
过滤以下关键字、标签:alert、img、script、document、document.title、document.write、eval、prompt、onclick、onerror、onmouseenter、onreadystatechange、confirm、JavaScript、String.fromCharCode、onload、DYNSRC、LOWSRC、behavior、vbscript、msgbox、mocha、livescript、expression。
开发语言的建议:
[1]严格控制输入:
Asp:request
Aspx:Request.QueryString、Form、Cookies、SeverVaiables等
PHP:$_GET、$_POST、$_COOKIE、$_SERVER、$_GlOBAL、$_REQUEST等
Jsp:request.getParameter、request.getCookies 等
客户端提交的变量一般从以上函数获得,严格限制提交的数据长度、类型、字符集。
[2]严格控制输出:
HtmlEncode:对一段指定的字符串应用HTML编码。
UrlEncode:对一段指定的字符串URL编码。
XmlEncode:将在XML中使用的输入字符串编码。
XmlAttributeEncode:将在XML属性中使用的输入字符串编码
escape:函数可对字符串进行编码
decodeURIComponent:返回统一资源标识符的一个已编码组件的非编码形式。
encodeURI:将文本字符串编码为一个有效的统一资源标识符 (URI)。" "get型xss:
- 跨站请求伪造
方案一、存在漏洞的页面加验证码或手机短信验证
方案二、检测HTTP请求中的访问来源是否可信,对http头中的referer进行过滤,只允许本域站点
方案三、一次性令牌Token
添加一个参数Token,其值是随机的。这样攻击者因为不知道Token而无法构造出合法的请求进行攻击。实现方法:首先服务器端要以某种策略生成随机字符串,作为令牌(token),保存在 Session 里。然后在发出请求的页面,把该令牌以隐藏域一类的形式,与其他信息一并发出。在接收请求的页面,把接收到的信息中的令牌与 Session 中的令牌比较,只有一致的时候才处理请求,否则拒绝请求或者要求用户重新登陆验证身份。
Token 使用原则:
Token要足够随机————只有这样才算不可预测
Token是一次性的,即每次请求成功后要更新Token————这样可以增加攻击难度,增加预测难度
Token要注意保密性————敏感操作使用post,防止Token出现在URL中
方案四、临时cookie:对会话进行时效限制,将持久化的授权方法(例如cookie或者HTTP授权)切换为短时或瞬时的授权方法
方案五、session标记随机生成;确认已有的session标记无法被二次使用
方案六、过滤用户输入,例如论坛、博客等,不允许发布含有站内操作URL的链接(作用有限,因为可以通过qq、第三方网站进行发布,图片形式会自动加载等)
方案七、根据不可预测性原则,我们可以对参数进行加密从而防止CSRF攻击。"
已解密的登录请求 对诸如用户名、密码和信用卡号之类的敏感输入字段进行加密传递
会话定置 "COOKIE中的登陆前JSESSIONID与登陆后JESSIONID不能相同
例如在登录页面上加上一段代码:
- request.getSession().invalidate() ; //清空session
- if (request.getCookies()!=null) {
- Cookie cookie = request.getCookies()[0]; // 获取cookie
- cookie.setMaxAge(0); // 让cookie过期
- }"
- 文件上传
[1]严格判断上传文件的类型,设置上传文件白名单,只允许上传指定类型的文件。
[2]禁止在上传目录下执行脚本。
[3]上传文件的目录必须是http请求无法直接访问到的。如果需要访问的,必须上传到其他(和web服务器不同的)域名下,并设置该目录为不解析jsp等脚本语言的目录。
[4]上传文件要保存的文件名和目录名由系统根据时间生成,不允许用户自定义。
[5]图片上传,要通过处理(缩略图、水印等),无异常后才能保存到服务器。"
- jQuery跨站脚本
"升级jQuery到1.7版本以上,或在js中修改如下行,quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/
修改为:quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/"
- 启用了不安全的HTTP方法
修改web.xml,增加如下配置
- <login-config>
- <!-- Authorization setting for SSL -->
- <auth-method>CLIENT-CERT</auth-method>
- <realm-name>Client Cert Users-only Area</realm-name>
- <auth-method>BASIC</auth-method>
- </login-config>
- <security-constraint>
- <!-- Authorization setting for SSL -->
- <web-resource-collection>
- <web-resource-name>SSL</web-resource-name>
- <url-pattern>/oa/login.jsp</url-pattern>
- </web-resource-collection>
- <user-data-constraint>
- <transport-guarantee>CONFIDENTIAL</transport-guarantee>
- </user-data-constraint>
- </security-constraint>
- <!-- 禁止不安全的http方法 -->
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>fortune</web-resource-name>
- <url-pattern>/*</url-pattern>
- <http-method>PUT</http-method>
- <http-method>DELETE</http-method>
- <http-method>HEAD</http-method>
- <http-method>OPTIONS</http-method>
- <http-method>TRACE</http-method>
- </web-resource-collection>
- <auth-constraint></auth-constraint>
- </security-constraint>
- 登录错误消息凭证枚举
对每个错误的登录尝试发出相同的错误消息,不管是哪个字段发生错误,特别是用户名或密码字段错误。
文件备份 "删除备份文件。
.arc/.bac/.backup/.bak/.bck/.copy/.old/.orig/.sav/.save/.saved/.swp/.temp/.test/.tmp/.txt"。
以下是我自己写的一份拦截器,里面可以实现对http请求的参数拦截,解决跨站脚本注入:
- package com.asiainfo.aiga.common.filter;
- import java.io.IOException;
- import java.util.Enumeration;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.lang3.StringUtils;
- public class XSSCheckFilter implements Filter
- {
- private FilterConfig config;
- private static String errorPath;//出错跳转的目的地
- private static String[] excludePaths;//不进行拦截的url
- private static String[] safeless = { "<script", //需要拦截的JS字符关键字
- "</script", "<iframe", "</iframe", "<frame", "</frame", "set-cookie", "%3cscript", "%3c/script", "%3ciframe", "%3c/iframe", "%3cframe", "%3c/frame", "src=\"javascript:", "<body", "</body", "%3cbody", "%3c/body", "alert", "script", "document", "document.title", "document.write", "eval", "prompt", "onreadystatechange", "javascript", "msgbox"
- //"<",
- //">",
- //"</",
- //"/>",
- //"%3c",
- //"%3e",
- //"%3c/",
- //"/%3e"
- };
- public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException
- {
- Enumeration params = req.getParameterNames();
- HttpServletRequest request = (HttpServletRequest) req;
- HttpServletResponse response = (HttpServletResponse) resp;
- boolean isSafe = true;
- String requestUrl = request.getRequestURI();
- if (isSafe(requestUrl))
- {
- requestUrl = requestUrl.substring(requestUrl.indexOf("/"));
- if (!excludeUrl(requestUrl))
- {
- while (params.hasMoreElements())
- {
- String cache = req.getParameter((String) params.nextElement());
- if (StringUtils.isNotBlank(cache))
- {
- if (!isSafe(cache))
- {
- isSafe = false;
- break;
- }
- }
- }
- }
- }
- else
- {
- isSafe = false;
- }
- if (!isSafe)
- {
- request.setAttribute("msg", "There is some illegal characters in paramters.");
- request.getRequestDispatcher(errorPath).forward(request, response);
- return;
- }
- else
- {
- String referer = request.getHeader("referer");
- if (!("/index.jsp".equals(request.getServletPath()) || "/refresh.jsp".equals(request.getServletPath())))
- {
- if(request.getServletPath()!=null&&request.getServletPath().endsWith(".action")){
- }else if (referer == null || !referer.contains(request.getServerName()))
- {
- System.out.println("跨站请求伪造");
- //转到一个错误的图片
- request.getRequestDispatcher(errorPath).forward(request, response);
- }
- }
- }
- filterChain.doFilter(req, resp);
- }
- private static boolean isSafe(String str)
- {
- if (StringUtils.isNotBlank(str))
- {
- for (String s : safeless)
- {
- String[] strs = str.split("/");
- for (String urlStr : strs)
- {
- if (s.equals(urlStr.toLowerCase()))
- {
- return false;
- }
- }
- }
- }
- return true;
- }
- private boolean excludeUrl(String url)
- {
- if (excludePaths != null && excludePaths.length > 0)
- {
- for (String path : excludePaths)
- {
- if (url.toLowerCase().equals(path))
- {
- return true;
- }
- }
- }
- return false;
- }
- public void destroy()
- {
- }
- public void init(FilterConfig config) throws ServletException
- {
- this.config = config;
- errorPath = config.getInitParameter("errorPath");
- String excludePath = config.getInitParameter("excludePaths");
- if (StringUtils.isNotBlank(excludePath))
- {
- excludePaths = excludePath.split(",");
- }
- }
- }
相关推荐
1.3.8 链接注入(便于跨站请求伪造) 18 1.3.9 应用程序错误 25 1.3.10 SQL注入 29 1.3.11 发现数据库错误模式 38 1.3.12 启用了不安全的HTTP方法 48 1.3.13 发现电子邮件地址模式 50 1.3.14 HTML注释敏感信息泄露 ...
第五节 跨站请求伪造 什么是跨站请求伪造 跨站请求伪造的危害 如何防止跨站请求伪造 第六节 越权操作 什么是越权操作 越权操作的危害 如何防止越权操作 第七节 IO操作安全 第八节 缓存泄漏 什么是缓存泄漏 防御...
四、跨站请求伪造CSRF 五、应用逻辑漏洞 六、跨站脚本攻击XSS 七、SQL 注入 八、开放重定向漏洞 九、子域劫持 十、XML 外部实体注入 十一、代码执行 十二、模板注入 十三、服务端请求伪造SSRF 十四、内存攻击 十五、...
Web 应用安全漏洞原理及测试技术1 SQL注入漏洞 任意文件上传漏洞 任意文件下载漏洞 文件包含漏洞 XSS跨站脚本漏洞 CSRF跨站请求伪造漏洞 逻辑漏洞
PHP 漏洞全解( 一)-PHP 网页的安全性问题 ...1、命令注入(Command Injection) ...6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7、Session 会话劫持(Session Hijacking) 8、Session 固定攻击(Session
本文从开放源代码Web应用程序安全项目(OWASP)社区中列出的Web应用程序的十大安全风险开始,重点关注应用程序层DDoS,SQL注入,跨站点脚本XSS,跨站点请求伪造CSRF和文件包含漏洞 。 详细分析了这些攻击的原理和...
它旨在自动查找和修复 Web 应用程序中的 SQL 注入、跨站脚本 (XSS) 和跨站请求伪造 (CSRF) 等漏洞。它可以扫描托管在各种平台上的 Web 应用程序,包括 Windows、Linux 和 macOS。它提供了一系列功能来帮助开发人员和...
5.SQL注入攻击(SQL injection) 6.跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7.Session 会话劫持(Session Hijacking) 8.Session 固定攻击(Session Fixation) 9.HTTP响应拆分攻击(HTTP ...
web渗透: 伪造请求 web渗透: 验证码功能缺陷 web渗透: 竞争并发漏洞 web渗透: IMAPSMTP注入 web渗透: 本地文件包含远程文件包含 web渗透: 文件上传漏洞 web渗透: web服务器控制台地址泄漏 web渗透: 报错信息测试 web...
CSRF(跨站请求伪造):解释CSRF攻击是如何通过伪装用户合法请求来执行未授权的操作,以及如何在DVWA中模拟和防御此类攻击。 3。文件包含:说明文件包含漏洞是如何允许攻击者包含或执行系统中的文件,从而可能引发未...
5、SQL注入攻击(SQL injection) 6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7、Session 会话劫持(Session Hijacking) 8、Session 固定攻击(Session Fixation) 9、HTTP响应拆分攻击(HTTP ...
CSRF(跨站请求伪造) SSRF(服务器端请求伪造) 文件上传下载:富文本编辑器 弱口令: X-Scan、Brutus、Hydra、溯雪等工具 其它漏洞: 4、逻辑漏洞(3天) 平行越权 垂直越权 任意密码重置 支付漏洞:0元购 接口...
PHP漏洞全解(一)-PHP网站的安全性问题 PHP漏洞全解(二)-命令注入攻击 ...PHP漏洞全解(六)-跨网站请求伪造 PHP漏洞全解(七)-Session劫持 PHP漏洞全解(八)-HTTP响应拆分 PHP漏洞全解(九)-文件上传漏洞
全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并着重分析了“拖库”事件时黑客所使用的攻击手段。此外,还介绍了渗透测试工程师其他的一些...
常见Web应用安全威胁(一) 注入攻击 Injection WEB应用程序对用户输入数据的合法性判断不够,对用户输入过滤不足 SQL注入和命令注入 跨站脚本攻击 Cross Site Scripting,XSS 恶意攻击者往Web页面里插入恶意代码,...
提供安全手工测试用例,包括身份鉴别、登录控制、越权测试、SQL注入、跨站点脚本编制、文件上传、跨站点请求伪造等web应用安全漏洞的手工测试方法
Pikachu是一个带有漏洞的Web应用系统,在... CSRF(跨站请求伪造) SQL-Inject(SQL注入漏洞) RCE(远程命令/代码执行) Files Inclusion(文件包含漏洞) Unsafe file downloads(不安全的文件下载) Unsafe file uploads
WAF),通过对HTTP(S)请求进行检测,识别并阻断SQL注入、跨站脚本攻击、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第三方应用漏洞攻击、CC攻击、恶意爬虫扫描、跨站请求伪造等攻击,保护Web服务安全...
web渗透--37--伪造请求.pdf web渗透--38--验证码功能缺陷.pdf web渗透--39--竞争并发漏洞.pdf web渗透--4--Google Hacking.pdf web渗透--40--IMAPSMTP注入.pdf web渗透--41--本地文件包含远程文件包含.pdf web渗透--...