整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端工程师面试必考Web网络安全之 XXS脚本攻击示例及防御措施


么是XSS脚本攻击

XSS全名:Cross-Site-Scripting, 理论上缩小应该为 CSS 但为了和 CSS(层叠样式表)进行区分,改了个名字叫XSS.

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容

xss脚本攻击原理

HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title>与</title>之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

xss脚本攻击特点

与钓鱼攻击相比,XSS攻击所带来的危害更大,通常具有如下特点:

①由于XSS攻击在用户当前使用的应用程序中执行,用户将会看到与其有关的个性化信息,如账户信息或“欢迎回来”消息,克隆的Web站点不会显示个性化信息。

②通常,在钓鱼攻击中使用的克隆Web站点一经发现,就会立即被关闭。

③许多浏览器与安全防护软件产品都内置钓鱼攻


若我们在评论里输入了一段可执行的javascr,让他弹出 OK,当把评论提交后,如果没有网站没有做字符的过滤处理的话,那么我们提交的脚本就会加载到页面里,但是别忘了他是一个JS的alert方法,然后大家一打开评论页面就会弹出 OK.

可能的几种XSS注入方式

  • alert(String.fromCharCode(88,83m83)) 通过获取字母的ASCII码来规避网站的过滤。
  • <img src ="javascript:alert('xss')"/>通过img标签来达到攻击的目的,
  • <link rel="stylesheet" href="javascript:alert(xss);">通过样式表注入
  • <style>@im\port'\ja\vasc\ript:alert('xss')';</style>通过style方式注入

XSS脚本攻击防御方式:

  • 不信任用户提交的任何内容,对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、REFER、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。尽量采用POST而非GET提交表单;对“<”,“>”,“;”,“””等字符做过滤;任何内容输出到页面之前都必须加以en-code,避免不小心把htmltag显示出来。
  • 实现Session 标记(session tokens)、验证码系统或者HTTP引用头检查,以防功能被第三方网站所执行,对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作。
  • cookie 防盗。避免直接在cookie中泄露用户隐私,例如email、密码,等等;通过使cookie和系统IP绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,很难拿来直接进行重放攻击。
  • 确认接收的内容被妥善地规范化,仅包含最小的、安全的Tag(没有JavaScript),去掉任何对远程内容的引用(尤其是样式表和JavaScript),使用HTTPonly的cookie。

G版本通用外挂开发 UG Open/Grip 教程

$$ 注释

$$ Grip启动和编译:先找到UG的安装路径,如C:\Program Files\EDS\Unigraphics NX。

$$ 进入该路径下的UGOPEN目录,找到grade.bat文件,打开它,将环境变量base_dir

$$ 设置成set base_dir=C:\Program Files\EDS\Unigraphics NX,保存并运行。

$$ Grip程序的编写和编译:在Grip的运行程序中,键入4,将你编写的Grip程序所在的目

$$ 录写入并回车。在Grip的运行程序中,键入1,写入新建Grip程序的文件名并回车,此时

$$ Grip会打开写字板,你可以在其中写入你的程序。在Grip的运行程序中,键入2,写入

$$ 所编译的文件名,编译无错后,键入3,写入所链接的文件名,链接无错后完成。

$$ 你所编写的Grip程序保存成*.grs文件,编译后Grip会生成*.gri文件,链接后Grip会

$$ 生成*.grx文件,此文件为Grip的运行文件。

$$ Grip程序的运行:打开UG,点击File->Execute->Grip,选择*.grx文件,就可运行它。

$$ 编译时应先编译子函数文件,生成*.gri,子函数文件不需要链接,此时再编译主函数

$$ 文件,生成*.gri,最后链接成*.grx。

$$ Grip主函数文件必须以HALT结束,Grip子函数文件必须以RETURN结束。

$$ 定义的变量不能超过6个字符,Grip会认为Point_1和Point_2是同一个变量。

$$ 一行不能超过80个字符,若超过,可用$符号来换行。

$$ Grip不区分大小写,也就是Grip会认为POINT和point都是画点函数,但是我建议Grip

$$ 的函数名和关键字用大写,用户定义的变量用小写。但是用户定义的变量不能和Grip的

$$ 函数名和关键字重名。

$$ Grip的帮助文件在C:\EDS\Unigraphics NX\UGDOC\html_files\mainlibrary.chm\

$$ Open\GRIP Reference Guide下。一个简便的Grip函数查找方法:打开...\Word &

$$ Symbol Lists\Major Word List,根据首字母来查函数。

HALT $$ 结束语

ideo标签

  • 作用: 播放视频

  • 格式1:



  • video标签的属性

    • src: 告诉video标签需要播放的视频地址

    • autoplay: 告诉video标签是否需要自动播放视频

    • controls: 告诉video标签是否需要显示控制条

    • poster: 告诉video标签视频没有播放之前显示的占位图片

    • loop: 告诉video标签循环播放视频. 一般用于做广告视频

    • preload: 告诉video标签预加载视频, 但是需要注意preload和autoplay相冲, 如果设置了autoplay属性, 那么preload属性就会失效

    • muted:告诉video标签视频静音

    • width/height: 和img标签中的一模一样

  • 格式2



  • 第二种格式存在的意义

    • 由于视频数据非常非常的重要, 所以五大浏览器厂商都不愿意支持别人的视频格式, 所以导致了没有一种视频格式是所有浏览器都支持的这个时候W3C为了解决这个问题, 所以推出了第二个video标签的格式

    • ideo标签的第二种格式存在的意义就是为了解决浏览器适配问题. video 元素支持三种视频格式, 我们可以把这三种格式都通过source标签指定给video标签, 那么以后当浏览器播放视频时它就会从这三种中选择一种自己支持的格式来播放

  • 注意点:

    • 当前通过video标签的第二种格式虽然能够指定所有浏览器都支持的视频格式, 但是想让所有浏览器都通过video标签播放视频还有一个前提条件, 就是浏览器必须支持HTML5标签, 否则同样无法播放

    • 在过去的一些浏览器是不支持HTML5标签的, 所以为了让过去的一些浏览器也能够通过video标签来播放视频, 那么我们以后可以通过一个JS的框架叫做html5media来实现

audio标签

  • 作用: 播放音频

  • 格式:

  • 注意点:

    • audio标签的使用和video标签的使用基本一样, video中能够使用的属性在audio标签中大部分都能够使用, 并且功能都一样. 只不过有3个属性不能用, height/width/poster

详情和概要标签

  • 作用:利用summary标签来描述概要信息, 利用details标签来描述详情信息

    默认情况下是折叠展示, 想看见详情必须点击

  • 格式:



marquee标签

  • 作用: 跑马灯效果

格式:

  • 属性:

    • direction: 设置滚动方向 left/right/up/down

    • scrollamount: 设置滚动速度, 值越大就越快

    • loop: 设置滚动次数, 默认是-1, 也就是无限滚动

    • behavior: 设置滚动类型 slide滚动到边界就停止, alternate滚动到边界就弹回

  • 注意点:

    • marquee标签不是W3C推荐的标签, 在W3C官方文档中也无法查询这个标签, 但是各大浏览器对这个标签的支持非常好

HTML中被废弃的标签

— 由于HTML现在只负责语义而不负责样式.但是HTML一开始有一部分标签连样式也包揽了, 所以这部分标签都被废弃了

  • b(Bold)作用: 将文本字体加粗

    • 格式:<b>将文本字体加粗</b>

  • u(Underlined)作用: 为文本添加下划线

    • 格式:<u>为文本添加下划线</u>

  • i(Italic)作用: 显示斜体文本效果

    • 格式:<i>显示斜体文本效果</i>

  • s(Strikethrough)作用: 为文本添加删除线

    • 格式:<s>为文本添加删除线</s>

  • 为了弥补 b、u、i、s标签的不足, W3C又推出了一组新的标签, 这些标签在显示上看似和buis没什么区别, 但是在语义上却有重大区别

    • 格式:<del>已删除的文本</del>

    • 格式:<em>强调内容</em>

    • 格式:<ins>新插入的文本</ins>

    • 格式:<strong>着重内容</strong>

    • strong作用: 着重内容

    • ins(Inserted)作用: 新插入的文本

    • em(Emphasized)作用:强调内容

    • del(Deleted)作用: 已删除的文本

    • 其它更多详见维基百科

HTML实体

  • 我们想在页面上输出<h1>这些字符,但是HTML认为这是一个标签, 所以如果需要输出一些特殊的字符需要通过字符实体来实现

  • lt是英语less than 小于的意思, &lsaquo;可以在页面上输出一个小于符号

  • gt是英语greater than 大于的意思, &gt;可以在页面上输出一个大于符号

  • html中对空格,缩进,换行不敏感,如果同时出现多个空格缩进或者执行,页面只会把它们当作一个空格来解析。所以想要在html中输出空格必须使用&nbsp;来实现, 一个&nbsp;就代表一个空格

    • html对中文空格敏感, 也就是说可以显示中文空格, 但是不推荐这样使用

    • &nbsp;是英语non-breaking spacing, 翻译为不打断空格的意思

关于课程的疑问和更多讨论,可以登录http://bbs.520it.com/forum.php?mod=viewthread&tid=2418