B/S开发框架Web安全之XSS跨站入侵

Web站点为什么会遭受攻击?是为了恶作剧?损害企业名誉?免费浏览收费内容?盗窃用户隐私信息?获取用户账号谋取私利?总之攻击方式层出不穷,作为B/S开发框架来说,帮助开发者做好解决安全问题也是刻不容缓的,本篇文章来告诉大家怎么防范非法SQL注入。

适用范围

Web中 带有显式URL跳转 或 带有存储型文本框的页面。

攻击原理

1、非持久型分为反射型XSS及URL跳转;

反射型XSS恶意代码不保留在服务器上,而是通过其他形式实时通过服务器反射给普通用户;

URL跳转,参数型跨站脚本,主要用于将恶意脚本附加到URL地址的参数中,然后诱使用户访问该网址,当受害者单击这些专门设计的链接时,恶意代码会直接在受害者主机上的浏览器中执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称为反射型跨站脚本。

例子:URL跳转

http://www.hstjp.com:883/Login.aspx?ReturnUrl=http%3A%2F%2Fwww.hstgzpt.com%2F  URL跳转,将参数ReturnUrl的值替换成钓鱼网站的地址。

反射: <input type="text" name="address1" value="value1from"> value1from 是来自用户的输入,如果用户不是输入value1from,

而是输入"/><script>alert(document.cookie)</script><!- 那么就会变成<input type="text" name="address1"value=""/><script>alert(document.cookie)

</script><!- "> 嵌入的JavaScript代码将会被执行

2、持久型XSS 也叫存储型跨站脚本,比反射型跨站脚本更具威胁性,并且可能影响到Web服务器自身的安全。此类XSS不需要用户单击特定的URL就能执行跨站脚本,攻击者事先将恶意代码上传或存储到漏洞服务器中,只要受害者浏览该页面就会执行恶意脚本。

例子:用户通过文本框输入脚本,后台未进行过滤或转义,脚本直接保存,下一个用户访问该地址时用户通过某种方式获取用户的cookie信息。

解决方案

应用程序处理

1、URL跳转:

B/S开发框架策略1:指定域名跳转,后台进行判断,非该域名不予跳转;

System.Uri u = new System.Uri(strReturnUrl);
if (u.Host.IndexOf(".baidu.com") == -1)
{
        strReturnUrl = @"http://www.baidu.com";
}

策略2:

参照百度,对URL进行加密传输。

2、反射型与持久型

web开发中反射型与持久型过滤方式一至

策略1:过滤,对html标签及js脚本进行过滤,这种方式由于标签量较大,实标应用中不算可取。

策略2 转义:

String title = request.getParameter(“title”);
String id = request.getParameter(“id”);
<span> <%=xss.HtmlEncoder(title,”HTML”)%></span>
<span> <%=xss.HtmlEncoder(contect,”HTML”)%></span>

3、B/S开发框架后台过滤

public static string HtmlEncode(string Encode)
{
    // 将输入字符串编码,这样所有的HTML标签都失效了。
    StringBuilder sbStr = new StringBuilder(HttpUtility.HtmlEncode(Encode));
    // 选择性的允许<b> 和 <i>
    sbStr.Replace("<b>", "<b>");
    sbStr.Replace("</b>", "</b>");
    sbStr.Replace("<i>", "<i>");
    sbStr.Replace("</i>", "</i>");
    return sbStr.ToString();
}
public static string WipeScript(string html)
{
    System.Text.RegularExpressions.Regex regex1 = new
    System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex2 = new
    System.Text.RegularExpressions.Regex(@" href *= *[\s\S]*script *:",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex3 = new
    System.Text.RegularExpressions.Regex(@" on[\s\S]*=",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex4 = new
    System.Text.RegularExpressions.Regex(@"<iframe[\s\S]+</iframe *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex5 = new
    System.Text.RegularExpressions.Regex(@"<frameset[\s\S]+</frameset *>",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex6 = new
    System.Text.RegularExpressions.Regex(@"<input[\s\S]+</input *>",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex7 = new
    System.Text.RegularExpressions.Regex(@"<style[\s\S]+</style *>",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex8 = new
    System.Text.RegularExpressions.Regex(@"<link[\s\S]+</link *>",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex9 = new
    System.Text.RegularExpressions.Regex(@"<(input|link|iframe|frameset|frame)[^>]*/>",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.Regex regex10 = new
    System.Text.RegularExpressions.Regex(@"<\\/*[^<>]*>",
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    html = regex1.Replace(html, ""); //过滤<script></script>标记
    html = regex2.Replace(html, ""); //过滤href=javascript: (<a>) 属性
    html = regex3.Replace(html, ""); //过滤其它控件的on...事件
    html = regex4.Replace(html, ""); //过滤iframe
    html = regex5.Replace(html, ""); //过滤frameset
    html = regex6.Replace(html, ""); //过滤input
    html = regex7.Replace(html, ""); //过滤Style
    html = regex8.Replace(html, ""); //过滤link
    html = regex9.Replace(html, ""); //过滤通用标签名
    html = regex10.Replace(html, ""); //过滤尖括号星号等
    return html;
}

  

管理处理

物理处理

Web站点为什么会遭受攻击?是为了恶作剧?损害企业名誉?免费浏览收费内容?盗窃用户隐私信息?获取用户账号谋取私利?总之攻击方式层出不穷,作为B/S开发框架来说,帮助开发者做好解决安全问题也是刻不容缓的,本篇文章来告诉大家怎么防范非法SQL注入。

原文地址:https://www.cnblogs.com/bdft/p/10105216.html

时间: 2024-09-30 07:03:38

B/S开发框架Web安全之XSS跨站入侵的相关文章

web安全性测试——XSS跨站攻击

1.跨站攻击含义 XSS:(Cross-site scripting)全称“跨站脚本”,是注入攻击的一种.其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有 JavaScript 的内容文本.这时服务器端如果没有过滤或转义掉这些脚本,作为内容发布到了页面上,其他用户访问这个页面的时候就会运行这些脚本. 一个永远关不掉的窗口while (true) { alert("你关不掉我~"); } CSRF:跨站请求伪造(Cross-site request

WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Webshell上传.命令注入.非法HTTP协议请求.非授权文件访问等.

XSS跨站漏洞 加强Web安全

第1章 课程介绍简单介绍课程的内容.1-1 课程介绍 试看 第2章 基础知识在基础知识章节中主要让同学们对XSS有一个总体的概念,对XSS的原理及危害,以及XSS的类型有一个概念,这个章节中包含了 XSS介绍及原理.反射型XSS.存储型XSS.DOM型XSS等内容.2-1 XSS介绍及原理 试看2-2 反射型XSS实战及防御 试看2-3 存储型XSS实战及防御2-4 DOM型XSS实战及防御 第3章 工具使用在工具使用章节中主要让同学们对掌握挖掘XSS漏洞的一些工具使用方法,比如网站扫描,暴力测

漫话web渗透 : xss跨站攻击day1

1.1什么是XSS跨站攻击 xss攻击并不是对服务器进行攻击,而是借助网站进行传播,攻击者精心构造的一个URL,欺骗受害者打开从而使恶意脚本在受害者计算机中悄悄运行1.2XSS实例 首先我们看一个简单的xss实例 <html> <head>this is a xss test</head> <body> <script>alert("xss")</script> </body> </html>

XSS跨站及利用

(一)软件测试环境以及搭建 测试环境:本地 XAMPP 1.7.1 测试软件:PHP168整站v5.0 软件下载地址 http://down2.php168.com/v2008.rar PHP.ini 配置: magic_quotes_gpc Off(On或者Off对持久型XSS并无没影响) ;register_globals Off ;safe_mode Off ; (二)XSS跨站基础 1.XSS攻击定义 XSS又叫CSS (Cross Site Script) ,简称跨站脚本攻击.它指的是

用shell脚本批量进行xss跨站攻击请求

由于执行的xss攻击请求他多了,初步估计要执行83次,而且还要执行3篇,如果手工一个一个去执行,说出去,我还配叫自动化大师吗: 有鉴于此,边打算自己编写一个脚本进行批量执行: 而短脚本的编写,非shell莫属,想到做到: 首先附上xss跨站攻击的请求报文: POST /web/show.asp?id=1327 HTTP/1.1 Host: 192.168.26.xxx Connection: close Accept: image/gif, image/jpeg, image/pjpeg, im

XSS跨站测试代码大全

XSS跨站测试代码大全                                                                                   摘自:http://www.cnblogs.com/qmfsun/p/5652712.html '><script>alert(document.cookie)</script>='><script>alert(document.cookie)</script>

XSS跨站获取cookie

测试环境:hacker端   and   victim端 1,hacker端(hacker.php)的程序内容如下: <?php $cookie=$_GET['cookie']; $file=fopen("cookie.txt","a"); fwrite($file,$cookie); fclose($file) ?> 2,受害者端(victim.php)的程序内容如下: <html> <head> <title>xs

修复XSS跨站漏洞

XSS跨站漏洞最终形成的原因是对输入与输出没有严格过滤. 1.输入与输出 在HTML中,<,>,",',&都有比较特殊的意义.HTML标签,属性就是由这几个符合组成的.PHP中提供了 htmlspecialchars().htmlentities()函数可以把一些预定的字符转换为HTML实体. &成为& "成为" '成为' <成为< 成为> 2.HttpOnly HttpOnly对防御XSS漏洞不起作用,主要是为了解决XS