跨站脚本攻击,Cross-site script,是Web程序中最常见的漏洞。为了和CSS层叠样式表区分开,所以取名为 XSS。

一、XSS的重点

跨域和客户端执行。

二、XSS的原理

攻击者向有XSS漏洞的网站中输入恶意的html或js代码,当其它用户浏览该网站时,html或js代码会自动执行,从而达到攻击的目的。

三、XSS的分类

1、存储型,持久型

在客户端文本框输入某脚本代码,提交到服务器,如果服务器没有过滤或转义掉这些脚本,直接存入数据库,其他用户访问这个页面的时候就会运行这段脚本。存储型XSS的攻击影响力比较大,有时候服务端需要删好几张表,查询很多库才能将恶意代码的数据进行删除。

例如,在评论文本框中输入

<script>
while(true) {
alert('你关不掉我');
}
</script>

2、反射型,非持久型

一来一去,脚本代码被服务器反射回来给浏览器执行,称为反射型XSS。反射型XSS是一次性的,仅对当次的页面访问产生影响。反射型XSS是对一个页面的URL中的某个参数做文章,把精心构造好的恶意脚本包装在URL参数中,再将这个URL发布到网上,骗取用户访问,从而进行攻击。反射型XSS的安全威胁比较小,因为只要服务器调整业务代码进行过滤,黑客精心构造的这段URL就会瞬间失效了。

例如,某网站A页面有搜索功能,历史记录的存取是前端通过cookie实现的,前端从文本框获取关键字及信息存入cookie,然后从url中的kw参数值来读出对应的cookie信息。

如果在地址栏url后面手动拼接

sfrom=syiconf8uk1"><script>alert(1)</script>m4cho

,回车后,页面会弹出1,也就是说url里面的代码执行了。解决办法是在存cookie的时候,对关键字进行特殊格式过滤。

function stripscript(s) {
var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*();—|{}【】‘;:”“'。,、?]");
var rs = "";
for (var i = 0; i < s.length; i++) {
rs = rs + s.substr(i, 1).replace(pattern, '');
}
return rs;
}

3、基于DOM或本地的XSS攻击。

一般是提供一个免费的wifi,但是提供免费wifi的网关会往你访问的任何页面插入一段脚本或者是直接返回一个钓鱼页面,从而植入恶意脚本。DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。

四、XSS的危害

1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号;

2、盗取用户的Cookie;

3、破坏页面结构;

4、重定向到其它网站。

五、XSS的防御

理论上,网站内所有可输入的地方没有对输入内容进行处理的话,都会存在XSS漏洞,漏洞的危险取决于攻击代码的威力,攻击代码也不局限于script,防御XSS最简单直接的方法就是过滤用户的输入。

1、将重要的cookie标记为http only这样Javascript中的document.cookie语句就不能获取到cookie了;

2、只允许用户输入我们期望的数据。例如:年龄的textbox中,只允许用户输入数字,而数字之外的字符都过滤掉;

3、对数据进行Html转义处理;

4、过滤或移除特殊的html标签,例如: <script>, <iframe> ,  < for <, > for >, " for;

5、过滤JavaScript 事件的标签。例如 "onclick=", "onfocus" 等等。

web客户端安全之跨站脚本攻击的更多相关文章

  1. web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造)

    web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造) XSS(跨站脚本攻击)和CSRF(跨站请求伪造) Cross-site Scripting (XSS) h ...

  2. [Web安全之实战] 跨站脚本攻击XSS

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章Points:  1. 认识XSS 2. ...

  3. web安全之xss跨站脚本攻击

    实验(一) 一.预备知识 1.HTML基础知识 2.phpstudy运用 3.xss的分类   二.实验环境 1.火狐浏览器.Chrome浏览器 2.phpstudy   三.环境搭建 反射型xss环 ...

  4. Web安全测试之XSS(跨站脚本攻击)

    XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的 ...

  5. Web攻防系列教程之跨站脚本攻击和防范技巧详解

    摘要:XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式.因为Web环境的复杂性以及XSS跨站脚本攻击的多变性,使得该类型攻击很 难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什么 ...

  6. Web安全之跨站脚本攻击(XSS)

    XSS 简介 跨站脚本攻击,英文全称是 Cross Site Script,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做&q ...

  7. 【安全测试】Web应用安全之XSS跨站脚本攻击漏洞

    前言 以前都只是在各类文档中见到过XSS,也进行过相关的学习,但是都是一知半解,过了一段时间就忘了. 前几天我们收到了了一份标题为<XX账号昵称参数中存在存储XSS漏洞>的报告文档,来源是 ...

  8. web应用程序安全攻防---sql注入和xss跨站脚本攻击

    kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 博文主要内容包括两种常见的web攻击 sql注入 XSS跨站脚本攻击 代 ...

  9. Web安全相关(一):跨站脚本攻击(XSS)

    简介 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页 ...

随机推荐

  1. 【BZOJ】3160: 万径人踪灭 FFT+回文串

    [题意]给定只含'a'和'b'字符串S,求不全连续的回文子序列数.n<=10^5. [算法]FFT+回文串 [题解]不全连续的回文子序列数=回文子序列总数-回文子串数. 回文子串数可以用回文串算 ...

  2. beta版1.1.2

    此次的beta版本做的修改重点在内部的算法上面. 因为之前所做的判断不重复的随机数方面采用的是String.valueof()的方式,即将int类型数字转换成string类型,比较string中是否出 ...

  3. ARC官方文档翻译! - iPhone App开发外包专区 - 威锋论坛 - 威锋网

    CHENYILONG Blog ARC官方文档翻译! - iPhone App开发外包专区 - 威锋论坛 - 威锋网  http://bbs.weiphone.com/read-htm-tid-344 ...

  4. C语言入门教程-(4)常量和变量

    1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和 ...

  5. 【Linux 命令】sed 命令

    文章转载自:https://www.jianshu.com/p/779f40985b20 文本分隔:------ # 在每一行后面增加一空行. sed G # 在每一行后面增加两行空行. sed &q ...

  6. celery简介

    目录 Celery简介 Celery架构 中间件选择 Celery序列化 简单项目 Celery简介 celery userguide 知乎大神解释celery Celery(芹菜)是基于Python ...

  7. 通过BurpSuite和sqlmap配合对dvwa进行sql注入测试和用户名密码暴力破解

    0x1 工具和环境介绍 dvwa:渗透测试环境 BurpSuite:强大的WEB安全测试工具 sqlmap:强大的sql注入工具 以上工具和环境都在kali linux上安装和配置. 0x2 步骤说明 ...

  8. Linux查看用户密码修改时间

    在/etc/shadow文件里面,第三个字段标识表示密码修改日期:这个是表明上一次修改密码的日期与1970-1-1相距的天数.如果账户自创建后,没有修改过密码,就可以使用这个字段来查找账号创建日期. ...

  9. Integer to Roman & Roman to Integer

    Integer to Roman Given an integer, convert it to a roman numeral. The number is guaranteed to be wit ...

  10. 原生js封装dom操作库

    var utils = (function(window) { var flag = "getComputedStyle" in window; function win(attr ...