广告
返回顶部
首页 > 资讯 > 精选 >后端如何防范xss攻击
  • 455
分享到

后端如何防范xss攻击

2024-04-02 19:04:59 455人浏览 独家记忆
摘要

后端防范xss攻击的示例:java后端防止xss攻击可添加Filter过滤器,例如:public class RequestXssFilter implements Filter {Filt

后端如何防范xss攻击

后端防范xss攻击的示例:

java后端防止xss攻击可添加Filter过滤器,例如:

public class RequestXssFilter implements Filter {

FilterConfig filterConfig = null;@Override

public void init(FilterConfig filterConfig) throws ServletException {

this.filterConfig = filterConfig;

}@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

filterChain.doFilter(new XsshttpservletRequestWrapper(

(HttpServletRequest) servletRequest), servletResponse);

}@Override

public void destroy () {

this.filterConfig = null;

}

}

再写一个实际过滤类:

public class XsshttpServletRequestWrapper extends HttpServletRequestWrapper {//白名单数组

private static final String[] WHITE_LIST = {"content"};

// 定义script的正则表达式

private static final String REGEX_SCRIPT = "<script[^>]*?>[\\s\\S]*?<\\/script>";

// 定义style的正则表达式

private static final String REGEX_STYLE = "<style[^>]*?>[\\s\\S]*?<\\/style>";

// 定义html标签的正则表达式

private static final String REGEX_HTML = "<[^>]+>";

// 定义空格回车换行符

private static final String REGEX_SPACE = "\\s*|\t|\r|\n";

//定义所有w标签

private static final String REGEX_W = "<w[^>]*?>[\\s\\S]*?<\\/w[^>]*?>";

//定义sql注入

private static String reg = "(\\b(select|update|uNIOn|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)";public XssHttpServletRequestWrapper(HttpServletRequest request) {

super(request);

}@Override

public String[] getParameterValues(String parameter) {

String[] values = super.getParameterValues(parameter);

if (values == null) {

return null;

}int count = values.length;String[] encodedValues = new String[count];for (int i = 0; i < count; i++) {

//白名单放行的只有HTML标签,sql标签还是要验证

if (isWhitelist(parameter)) {

if (sqlValidate(values[i])) {

encodedValues[i] = values[i];

}

encodedValues[i] = null;

}

encodedValues[i] = removeHtml(values[i]);

}return encodedValues;}@Override

public String getParameter(String parameter) {

String value = super.getParameter(parameter);

if (value == null) {

return null;

}

//白名单放行的只有HTML标签,sql标签还是要验证

if (isWhitelist(parameter)) {

if (sqlValidate(value)) {

return value;

}

return null;

}

return removeHtml(value);

}@Override

public String getHeader(String name) {

String value = super.getHeader(name);

if (value == null) {

return null;

}if (isWhitelist(name)) {

if (sqlValidate(value)) {

return value;

}

return null;

}

return removeHtml(value);

}

//\\b 表示 限定单词边界 比如 select 不通过 1select则是可以的

private static Pattern sqlPattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);

private static boolean sqlValidate(String str) {

if (sqlPattern.matcher(str).find()) {

System.out.println("未能通过过滤器:str=" + str);

return false;

}

return true;

}

private static boolean isWhitelist(String paramName) {

String lowerParam = paramName.toLowerCase();

String name = Arrays.stream(WHITE_LIST).filter(y -> y.toLowerCase().equals(lowerParam)).findAny().orElse(null);

return name != null;

}

private static String removeHtml(String htmlStr){

Pattern p_w = Pattern.compile(REGEX_W, Pattern.CASE_INSENSITIVE);

Matcher m_w = p_w.matcher(htmlStr);

htmlStr = m_w.replaceAll(""); // 过滤script标签

Pattern p_script = Pattern.compile(REGEX_SCRIPT, Pattern.CASE_INSENSITIVE);

Matcher m_script = p_script.matcher(htmlStr);

htmlStr = m_script.replaceAll(""); // 过滤script标签

Pattern p_style = Pattern.compile(REGEX_STYLE, Pattern.CASE_INSENSITIVE);

Matcher m_style = p_style.matcher(htmlStr);

htmlStr = m_style.replaceAll(""); // 过滤style标签

Pattern p_html = Pattern.compile(REGEX_HTML, Pattern.CASE_INSENSITIVE);

Matcher m_html = p_html.matcher(htmlStr);

htmlStr = m_html.replaceAll(""); // 过滤html标签

Pattern p_space = Pattern.compile(REGEX_SPACE, Pattern.CASE_INSENSITIVE);

Matcher m_space = p_space.matcher(htmlStr);

htmlStr = m_space.replaceAll(""); // 过滤空格回车标签

htmlStr = htmlStr.replaceAll(" ", ""); //过滤

return htmlStr.trim(); // 返回文本字符串

}

}

WEB.xml中添加过滤器,例如:

<filter>

<filter-name>XssEscape</filter-name>

<filter-class>cn.pinming.common.xss.RequestXssFilter</filter-class>

</filter>

--结束END--

本文标题: 后端如何防范xss攻击

本文链接: https://www.lsjlt.com/news/115979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 后端如何防范xss攻击
    后端防范xss攻击的示例:java后端防止xss攻击可添加Filter过滤器,例如:public class RequestXssFilter implements Filter {Filt...
    99+
    2022-10-06
  • jwt如何防范xss攻击
    jwt防范xss攻击的方法:使用jwt验证,由于服务端不保存用户信息,因此不用做sessonid复制,同时用户发请求给服务端时,前端使用JS将jwt放在header中手动发送给服务端,服务端验证header中的JWT字段,而非cookie信...
    99+
    2022-10-08
  • 如何防范xss攻击获cookie
    防范xss攻击获cookie的方法:在HTTP头部配上“set-cookie:httponly-”,httponly-这个属性可以预防xss攻击以及禁止javascript脚本来访问cookie,而“set-cookie:secure - ...
    99+
    2022-10-10
  • 前端如何防止xss攻击
    前端防止xss攻击的方法:过滤非法字符,例如:// 过滤XSS反射型漏洞filterInputTxt: function (html) {html = html.replace(/(.*]+>.*)/g,""); // HTML标记html...
    99+
    2022-10-06
  • 怎么在React中防范XSS攻击
    本篇内容介绍了“怎么在React中防范XSS攻击”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!跨站点脚本(XSS)攻击是一种将恶意代码注入网...
    99+
    2023-06-17
  • tp5如何防xss攻击
    tp5防xss攻击的方法:在公共函数文件common.php中加入以下方法:function filter_default($value){return htmlspecialchars($value, ENT_NOQUOTES);}在配置...
    99+
    2022-10-10
  • 解读vue项目防范XSS攻击问题
    目录1.对于从接口请求的数据2.对用V-HTML和INNERHTML加载的客户信息进行转义3.在入口页面的META中使用CSP4.针对特殊场景,选择性过滤XSS标签总结1.对于从接口...
    99+
    2023-01-28
    vue XSS攻击 vue防范XSS攻击 vue防范XSS
  • vue如何防止xss攻击
    这篇“vue如何防止xss攻击”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue如何防止xss攻击”文章吧。vue防止xs...
    99+
    2023-07-04
  • yii2如何防止xss攻击
    yii2防止xss攻击的示例代码:在对应文件中添加以下代码进行调用:function actionClean($str){$str=trim($str);$str=strip_tags($str);$str=stripslashe...
    99+
    2022-10-19
  • django如何防止xss攻击
    django防止xss攻击的方法:使用escape过滤器,无需转义时使用safe过滤器,对单一变量进行转义过滤,例如:Hello {{ a|escape }} # 转义{{a}} # 转义{{a|safe}} # 认为a安全,不进行转义利用...
    99+
    2022-10-09
  • react如何防止xss攻击
    react防止xss攻击的方法:react在渲染html内容和渲染dom属性时都会将 "'&<>这几个字符进行转义,转义部分源码如下:for (index = match....
    99+
    2022-10-13
  • angular如何防止xss攻击
    angular防止xss攻击的示例:angular提供了一个DomSanitizer服务,提供的方法如下:export enum SecurityContext { NONE, HTML, STYLE, SCRIPT, URL, RESOU...
    99+
    2022-10-17
  • java如何防止xss攻击
    java防止xss攻击的方案:配置过滤器,代码如下:public class XSSFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig)...
    99+
    2022-10-21
  • emlog如何防止xss攻击
    emlog防止xss攻击的方法:给cookie设置上httponly检查,操作步骤:打开“include\lib\loginauth.php”文件,找到第134行的setAuthCookie函数,改成以下代码:public static f...
    99+
    2022-10-15
  • js如何防止xss攻击
    js防止xss攻击的方法:对用户的输入及请求都进行过滤检查,如对特殊字符进行过滤,设置输入域的匹配规则等,例如:function removeXss(val){val = val.replace(/([\x00-\x08][\x0b-\x0...
    99+
    2022-10-21
  • 网页如何防止xss攻击
    网页防止xss攻击的方法:实现过滤器对特殊字符进行转义过滤,例如:function filter(xss) {  var whiteList = ['h1'...
    99+
    2022-10-23
  • 表单如何防止xss攻击
    表单防止xss攻击的方法:可以使用PHP中trim()函数去除用户输入数据中不必要的字符(如:空格、tab、换行)。使用PHP中stripslashes()函数去除用户输入数据中的反斜杠(\),示例代码:function chec...
    99+
    2022-10-22
  • springboot项目如何防止XSS攻击
    目录1. 什么是XSS攻击? 2. 如何防范? 2.1 什么时候注入请求参数 3. 具体处理细节 1. 什么是XSS攻击?     XSS攻...
    99+
    2022-11-12
  • 大cc攻击如何防范
    预防大cc攻击的方法对服务器进行垂直扩展和水平扩容通过对服务器进行垂直扩展和水平扩容,提升服务本身处理并发的能力,从而提高应对cc攻击的能力。对数据进行缓存将服务中具备高度共性、可重用的数据进行缓存,减轻数据库的检索压力和应用服务器的计算压...
    99+
    2022-10-19
  • CSRF攻击是什么?如何防范CSRF攻击?
    目录一、什么是CSRF攻击二、CSRF攻击的流程三、常见的CSRF攻击1、GET类型的CSRF2、POST类型的CSRF四、CSRF测试五、预防CSRF攻击5.1、验证HTTPRef...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作