热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java需要%3c标识符%3e_解决跨站脚本注入,跨站伪造用户请求,sql注入等http安全漏洞...

跨站脚本就是在url上带上恶意的js关键字然后脚本注入了,跨站伪造用户请求就是没有经过登陆,用超链接或者直接url上敲地址进入系统,类似于

跨站脚本就是在url上带上恶意的js关键字然后脚本注入了,跨站伪造用户请求就是没有经过登陆,用超链接或者直接url上敲地址进入系统,类似于sql注入这些都是安全漏洞。

sql注入

1、参数化查询预处理,如java使用PreparedStatement()处理变量。

2、转义敏感字符及字符串(SQL的敏感字符包括“exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”&#43;”,”//”,”..”,”;”,”‘”,”--”,”%”,”0x”,”><&#61;!-*/()|”,和”空格”)。

3、屏蔽出错信息&#xff1a;阻止攻击者知道攻击的结果。

4、在服务端正式处理之前对提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等&#xff0c;在确认客户端的输入合法之前&#xff0c;服务端拒绝进行关键性的处理操作。

跨站脚本

一般性建议&#xff1a;转义或过滤客户端提交的危险字符&#xff0c;客户端提交方式包含GET、POST、COOKIE、User-Agent、Referer、Accept-Language等&#xff0c;其中危险字符如下&#xff1a;

建议转义或过滤以下字符&#xff1a;

[1] |(竖线符号)

[2] & (& 符号)

[3];(分号)

[4] $(美元符号)

[5] %(百分比符号)

[6] &#64;(at 符号)

[7] &#39;(单引号)

[8] ""(引号)

[9] \&#39;(反斜杠转义单引号)

[10] \""(反斜杠转义引号)

[11] <>(尖括号)

[12] ()(括号)

[13] &#43;(加号)

[14] CR(回车符&#xff0c;ASCII 0x0d)

[15] LF(换行&#xff0c;ASCII 0x0a)

[16] ,(逗号)

[17] \(反斜杠)

[18]  (空格)

[19] . (点号)

过滤以下关键字、标签&#xff1a;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、。

开发语言的建议&#xff1a;

[1]严格控制输入&#xff1a;

Asp&#xff1a;request

Aspx&#xff1a;Request.QueryString、Form、COOKIEs、SeverVaiables等

Php&#xff1a;$_GET、$_POST、$_COOKIE、$_SERVER、$_GlOBAL、$_REQUEST等

Jsp&#xff1a;request.getParameter、request.getCOOKIEs 等

客户端提交的变量一般从以上函数获得&#xff0c;严格限制提交的数据长度、类型、字符集。

[2]严格控制输出&#xff1a;

HtmlEncode&#xff1a;对一段指定的字符串应用HTML编码。

UrlEncode&#xff1a;对一段指定的字符串URL编码。

XmlEncode&#xff1a;将在XML中使用的输入字符串编码。

XmlAttributeEncode&#xff1a;将在XML属性中使用的输入字符串编码

escape&#xff1a;函数可对字符串进行编码

decodeURIComponent&#xff1a;返回统一资源标识符的一个已编码组件的非编码形式。

encodeURI&#xff1a;将文本字符串编码为一个有效的统一资源标识符 (URI)。"

"get型xss&#xff1a;

跨站请求伪造

方案一、存在漏洞的页面加验证码或手机短信验证

方案二、检测HTTP请求中的访问来源是否可信&#xff0c;对http头中的referer进行过滤&#xff0c;只允许本域站点

方案三、一次性令牌Token

添加一个参数Token&#xff0c;其值是随机的。这样攻击者因为不知道Token而无法构造出合法的请求进行攻击。实现方法&#xff1a;首先服务器端要以某种策略生成随机字符串&#xff0c;作为令牌(token)&#xff0c;保存在 Session 里。然后在发出请求的页面&#xff0c;把该令牌以隐藏域一类的形式&#xff0c;与其他信息一并发出。在接收请求的页面&#xff0c;把接收到的信息中的令牌与 Session 中的令牌比较&#xff0c;只有一致的时候才处理请求&#xff0c;否则拒绝请求或者要求用户重新登陆验证身份。

Token 使用原则&#xff1a;

Token要足够随机————只有这样才算不可预测

Token是一次性的&#xff0c;即每次请求成功后要更新Token————这样可以增加攻击难度&#xff0c;增加预测难度

Token要注意保密性————敏感操作使用post&#xff0c;防止Token出现在URL中

方案四、临时COOKIE&#xff1a;对会话进行时效限制&#xff0c;将持久化的授权方法(例如COOKIE或者HTTP授权)切换为短时或瞬时的授权方法

方案五、session标记随机生成&#xff1b;确认已有的session标记无法被二次使用

方案六、过滤用户输入&#xff0c;例如论坛、博客等&#xff0c;不允许发布含有站内操作URL的链接(作用有限&#xff0c;因为可以通过qq、第三方网站进行发布&#xff0c;图片形式会自动加载等)

方案七、根据不可预测性原则&#xff0c;我们可以对参数进行加密从而防止CSRF攻击。"

已解密的登录请求对诸如用户名、密码和信用卡号之类的敏感输入字段进行加密传递

会话定置"COOKIE中的登陆前JSESSIONID与登陆后JESSIONID不能相同

例如在登录页面上加上一段代码&#xff1a;

request.getSession().invalidate() ; //清空session

if (request.getCOOKIEs()!&#61;null) {

COOKIE COOKIE &#61; request.getCOOKIEs()[0]; // 获取COOKIE

COOKIE.setMaxAge(0); // 让COOKIE过期

}"

文件上传

[1]严格判断上传文件的类型&#xff0c;设置上传文件白名单&#xff0c;只允许上传指定类型的文件。

[2]禁止在上传目录下执行脚本。

[3]上传文件的目录必须是http请求无法直接访问到的。如果需要访问的&#xff0c;必须上传到其他(和web服务器不同的)域名下&#xff0c;并设置该目录为不解析jsp等脚本语言的目录。

[4]上传文件要保存的文件名和目录名由系统根据时间生成&#xff0c;不允许用户自定义。

[5]图片上传&#xff0c;要通过处理(缩略图、水印等)&#xff0c;无异常后才能保存到服务器。"

jQuery跨站脚本

"升级Jquery到1.7版本以上&#xff0c;或在js中修改如下行&#xff0c;quickExpr &#61; /^(?:[^)[^>]*$|#([\w\-]&#43;)$)/

修改为&#xff1a;quickExpr &#61; /^(?:[^#)[^>]*$|#([\w\-]*)$)/"

启用了不安全的HTTP方法

修改web.xml,增加如下配置

CLIENT-CERT

Client Cert Users-only Area

BASIC

SSL

/oa/login.jsp

CONFIDENTIAL

fortune

/*

PUT

DELETE

HEAD

OPTIONS

TRACE

登录错误消息凭证枚举

对每个错误的登录尝试发出相同的错误消息&#xff0c;不管是哪个字段发生错误&#xff0c;特别是用户名或密码字段错误。

文件备份"删除备份文件。

.arc/.bac/.backup/.bak/.bck/.copy/.old/.orig/.sav/.save/.saved/.swp/.temp/.test/.tmp/.txt"。

以下是我自己写的一份拦截器&#xff0c;里面可以实现对http请求的参数拦截&#xff0c;解决跨站脚本注入&#xff1a;

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 &#61; { "

//"

//">",

//"",

//"/>",

//"%3c",

//"%3e",

//"%3c/",

//"/%3e"

};

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException

{

Enumeration params &#61; req.getParameterNames();

HttpServletRequest request &#61; (HttpServletRequest) req;

HttpServletResponse response &#61; (HttpServletResponse) resp;

boolean isSafe &#61; true;

String requestUrl &#61; request.getRequestURI();

if (isSafe(requestUrl))

{

requestUrl &#61; requestUrl.substring(requestUrl.indexOf("/"));

if (!excludeUrl(requestUrl))

{

while (params.hasMoreElements())

{

String cache &#61; req.getParameter((String) params.nextElement());

if (StringUtils.isNotBlank(cache))

{

if (!isSafe(cache))

{

isSafe &#61; false;

break;

}

}

}

}

}

else

{

isSafe &#61; false;

}

if (!isSafe)

{

request.setAttribute("msg", "There is some illegal characters in paramters.");

request.getRequestDispatcher(errorPath).forward(request, response);

return;

}

else

{

String referer &#61; request.getHeader("referer");

if (!("/index.jsp".equals(request.getServletPath()) || "/refresh.jsp".equals(request.getServletPath())))

{

if(request.getServletPath()!&#61;null&&request.getServletPath().endsWith(".action")){

}else if (referer &#61;&#61; 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 &#61; str.split("/");

for (String urlStr : strs)

{

if (s.equals(urlStr.toLowerCase()))

{

return false;

}

}

}

}

return true;

}

private boolean excludeUrl(String url)

{

if (excludePaths !&#61; 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 &#61; config;

errorPath &#61; config.getInitParameter("errorPath");

String excludePath &#61; config.getInitParameter("excludePaths");

if (StringUtils.isNotBlank(excludePath))

{

excludePaths &#61; excludePath.split(",");

}

}

}



推荐阅读
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • KVC:Key-valuecodingisamechanismforindirectlyaccessinganobject’sattributesandrelations ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
author-avatar
SH_ZTH_611_666_104_534
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有