分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

web安全之XSS注入

发布时间:2023-09-06 01:12责任编辑:苏小强关键词:暂无标签

之前在做项目的时候有遇到一些安全问题,XSS注入就是其中之一

那么,什么是XSS注入呢?

XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。

跨站脚本攻击的危害:窃取cookie、放蠕虫、网站钓鱼 ...

跨站脚本攻击的分类主要有:存储型XSS、反射型XSS、DOM型XSS

XSS漏洞是Web应用程序中最常见的漏洞之一。如果您的站点没有预防XSS漏洞的固定方法,那么就存在XSS漏洞。这个利用XSS漏洞的病毒之所以具有重要意义是因为,通常难以看到XSS漏洞的威胁,而该病毒则将其发挥得淋漓尽致。

通俗点讲,就是 恶意用户在某个表单或者公共区域输入了 可执行的html/js代码,窃取用户信息或者攻击网站

比如评论功能

假如我在评论里输入了一段可执行的script,让他弹出 123,当我把评论提交,如果没有网站没有做处理的话,那么我的脚本就会当成评论展示给其他人看,但是它在页面执行了,然后大伙一到我的评论页面就会弹出 123.

详细的各种情况可以看看这篇文章  web安全测试之xss

如何防御XSS注入

主要就是进行过滤,对可能引起XSS的注入进行过滤

 ?1 import java.net.URLEncoder; ?2 ??3 /** ?4 ?* 过滤非法字符工具类 ?5 ?* ??6 ?*/ ?7 public class EncodeFilter { ?8 ??9 ????//过滤大部分html字符 10 ????public static String encode(String input) { 11 ????????if (input == null) { 12 ????????????return input; 13 ????????} 14 ????????StringBuilder sb = new StringBuilder(input.length()); 15 ????????for (int i = 0, c = input.length(); i < c; i++) { 16 ????????????char ch = input.charAt(i); 17 ????????????switch (ch) { 18 ????????????????case ‘&‘: sb.append("&amp;"); 19 ????????????????????break; 20 ????????????????case ‘<‘: sb.append("&lt;"); 21 ????????????????????break; 22 ????????????????case ‘>‘: sb.append("&gt;"); 23 ????????????????????break; 24 ????????????????case ‘"‘: sb.append("&quot;"); 25 ????????????????????break; 26 ????????????????case ‘\‘‘: sb.append("&#x27;"); 27 ????????????????????break; 28 ????????????????case ‘/‘: sb.append("&#x2F;"); 29 ????????????????????break; 30 ????????????????default: sb.append(ch); 31 ????????????} 32 ????????} 33 ????????return sb.toString(); 34 ????} 35 ?36 ????//js端过滤 37 ????public static String encodeForJS(String input) { 38 ????????if (input == null) { 39 ????????????return input; 40 ????????} 41 ?42 ????????StringBuilder sb = new StringBuilder(input.length()); 43 ?44 ????????for (int i = 0, c = input.length(); i < c; i++) { 45 ????????????char ch = input.charAt(i); 46 ?47 ????????????// do not encode alphanumeric characters and ‘,‘ ‘.‘ ‘_‘ 48 ????????????if (ch >= ‘a‘ && ch <= ‘z‘ || ch >= ‘A‘ && ch <= ‘Z‘ || 49 ????????????????????ch >= ‘0‘ && ch <= ‘9‘ || 50 ????????????????????ch == ‘,‘ || ch == ‘.‘ || ch == ‘_‘) { 51 ????????????????sb.append(ch); 52 ????????????} else { 53 ????????????????String temp = Integer.toHexString(ch); 54 ?55 ????????????????// encode up to 256 with \\xHH 56 ????????????????if (ch < 256) { 57 ????????????????????sb.append(‘\\‘).append(‘x‘); 58 ????????????????????if (temp.length() == 1) { 59 ????????????????????????sb.append(‘0‘); 60 ????????????????????} 61 ????????????????????sb.append(temp.toLowerCase()); 62 ?63 ????????????????// otherwise encode with \\uHHHH 64 ????????????????} else { 65 ????????????????????sb.append(‘\\‘).append(‘u‘); 66 ????????????????????for (int j = 0, d = 4 - temp.length(); j < d; j ++) { 67 ????????????????????????sb.append(‘0‘); 68 ????????????????????} 69 ????????????????????sb.append(temp.toUpperCase()); 70 ????????????????} 71 ????????????} 72 ????????} 73 ?74 ????????return sb.toString(); 75 ????} 76 ?77 ????/** 78 ?????* css非法字符过滤 79 ?????* http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 80 ????*/ 81 ????public static String encodeForCSS(String input) { 82 ????????if (input == null) { 83 ????????????return input; 84 ????????} 85 ?86 ????????StringBuilder sb = new StringBuilder(input.length()); 87 ?88 ????????for (int i = 0, c = input.length(); i < c; i++) { 89 ????????????char ch = input.charAt(i); 90 ?91 ????????????// check for alphanumeric characters 92 ????????????if (ch >= ‘a‘ && ch <= ‘z‘ || ch >= ‘A‘ && ch <= ‘Z‘ || 93 ????????????????????ch >= ‘0‘ && ch <= ‘9‘) { 94 ????????????????sb.append(ch); 95 ????????????} else { 96 ????????????????// return the hex and end in whitespace to terminate 97 ????????????????sb.append(‘\\‘).append(Integer.toHexString(ch)).append(‘ ‘); 98 ????????????} 99 ????????}100 ????????return sb.toString();101 ????}102 103 ????/**104 ?????* URL参数编码 105 ?????* http://en.wikipedia.org/wiki/Percent-encoding106 ?????*/ 107 ????public static String encodeURIComponent(String input) {108 ????????return encodeURIComponent(input, "utf-8");109 ????}110 111 ????public static String encodeURIComponent(String input, String encoding) {112 ????????if (input == null) {113 ????????????return input;114 ????????}115 ????????String result;116 ????????try {117 ????????????result = URLEncoder.encode(input, encoding);118 ????????} catch (Exception e) {119 ????????????result = "";120 ????????}121 ????????return result;122 ????}123 124 ????public static boolean isValidURL(String input) {125 ????????if (input == null || input.length() < 8) {126 ????????????return false;127 ????????}128 ????????char ch0 = input.charAt(0);129 ????????if (ch0 == ‘h‘) {130 ????????????if (input.charAt(1) == ‘t‘ &&131 ????????????????input.charAt(2) == ‘t‘ &&132 ????????????????input.charAt(3) == ‘p‘) {133 ????????????????char ch4 = input.charAt(4);134 ????????????????if (ch4 == ‘:‘) {135 ????????????????????if (input.charAt(5) == ‘/‘ &&136 ????????????????????????input.charAt(6) == ‘/‘) {137 ????????????138 ????????????????????????return isValidURLChar(input, 7);139 ????????????????????} else {140 ????????????????????????return false;141 ????????????????????}142 ????????????????} else if (ch4 == ‘s‘) {143 ????????????????????if (input.charAt(5) == ‘:‘ &&144 ????????????????????????input.charAt(6) == ‘/‘ &&145 ????????????????????????input.charAt(7) == ‘/‘) {146 147 ????????????????????????return isValidURLChar(input, 8);148 ????????????????????} else {149 ????????????????????????return false;150 ????????????????????}151 ????????????????} else {152 ????????????????????return false;153 ????????????????}154 ????????????} else {155 ????????????????return false;156 ????????????}157 ????????????158 ????????} else if (ch0 == ‘f‘) {159 ????????????if( input.charAt(1) == ‘t‘ &&160 ????????????????input.charAt(2) == ‘p‘ &&161 ????????????????input.charAt(3) == ‘:‘ &&162 ????????????????input.charAt(4) == ‘/‘ &&163 ????????????????input.charAt(5) == ‘/‘) {164 ????????????????165 ????????????????return isValidURLChar(input, 6);166 ????????????} else {167 ????????????????return false;168 ????????????}169 ????????}170 ????????return false;171 ????}172 173 ????static boolean isValidURLChar(String url, int start) {174 ????????for (int i = start, c = url.length(); i < c; i ++) {175 ????????????char ch = url.charAt(i);176 ????????????if (ch == ‘"‘ || ch == ‘\‘‘) {177 ????????????????return false;178 ????????????}179 ????????}180 ????????return true;181 ????}182 183 }

这个code不是我自己码的,是我之前在网上看到的 地址是 WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

当然主要看原理,你也可以写成js公共方法,在需要的地方过滤也一样

web安全之XSS注入

原文地址:http://www.cnblogs.com/jiangshichao/p/7537693.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved