一、xss:
1、介绍:将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。
2、分类:存储型,反射型,DOM型。
3、危害:
(1)、盗用cookie,获取敏感信息。
(2)、利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
(3)、利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
(4)、利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
(5)、在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
简单来说就是攻击者通过正常的页面或请求,将非法的参数(如:js代码、html代码)请求到后端存储在数据库中,等下次页面回显时执行非法的参数,从而达到攻击的目的。
4、修复方法:
(1)、对用户输入的数据进行严格过滤,包括但不限于以下字符及字符串
Javascript script src href img onerror onload { } ( ) <> = , . ; : " ' # ! / * \
(2)、 根据页面的输出背景环境,对输出进行编码,常见符号的实体编码如下:[较根本的解决方法]
“(双引号):"
’ (单引号):&apos
&(&符号):&
<(左尖括号):<
>(右尖括号):>
(3)、 使用一个统一的规则和库做输出编码
(4)、 在Cookie 上设置HTTPOnly 标志,从而禁止客户端脚本访问Cookie
如:
5、修复案例:
(1)存储型
-
private static String handleContext(String value) {
-
-
if (
value !=
null) {
-
value =
value.replaceAll(
"",
"");
-
Pattern scriptPattern = Pattern.compile(
"<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"</script>", Pattern.CASE_INSENSITIVE);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"expression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"javascript:", Pattern.CASE_INSENSITIVE);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"vbscript:", Pattern.CASE_INSENSITIVE);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
"onerror(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
scriptPattern = Pattern.compile(
".*<.*", Pattern.CASE_INSENSITIVE );
-
value = scriptPattern.matcher(
value).replaceAll(
"");
-
}
-
return
value;
-
}
(2)反射型:
二、
转载:https://blog.csdn.net/w_t_y_y/article/details/106658288