RailsCase27 Cross Site Scripting 跨站点脚本攻击

跨站点脚本是开发过程中经常需要考虑的安全问题。此种情形发生在允许用户直接输入html、javascript脚本时。在下述的website中,我们并没有过滤输入的内容,导致一些安全漏洞。

如果在输入框中输入由<script>包围的内容,当页面被加载的时候,脚本将被执行,每次均将在前端展示。例如,如果输入<script>alert(’hello’)</script>并保存,每次浏览此页面时,都将看到alert的窗口。

嵌入页面的javascript脚本如下:

terminal

<h2>Comments</h2>
  <p>I‘ll start on this now - Paul</p>
  <p><script>alert(‘hello!‘);</script></p>
<hr/>

跨站点脚本可能被用于恶意的攻击。例如,可以读取站点上其他用户的cookie。将用户的cookie发送到远程服务器和alert内容一样的容易。cookie中的session id可被用来劫持其他用户的session。

上述展示了cookie中的session key。

预防攻击

为了预防此种攻击,需要在页面呈现内容前,过滤用户的输入内容。之前,我们直接从数据库中获取comment的内容并输入到html stream中。Rails提供了输出前过滤内容的方法,h方法。

ruby

<% @task.comments.each do |comment| %>
  <p><%= h(comment.content) %></p>
<% end %>

此时,当加载页面时,可以看出脚本不再执行。h方法过滤了尖括号(“<”和“>”)(将尖括号用html这种的转义字符标识)以便内容可正常显示。

Rails也提供了  sanitize 方法,允许设置白名单,白名单中的标签将不被过滤。

防止攻击的另外一种方式

与内容在浏览器展现前,过滤内容不同,可以在将数据存储在数据库前将数据进行过滤。在控制器中,h方法是不可行的,可用CGI::escapeHTML()实现此功能。

ruby

def create
    @task = Task.find(params[:task_id])
    @comment = @task.comments.new(params[:comment])
    @comment.content = CGI::escapeHTML(params[:comment][:content])
    @comment.save
    redirect_to task_path(@task)
  end
  1. http://en.wikipedia.org/wiki/Session_hijacking

原文地址:http://railscasts.com/episodes/27-cross-site-scripting?view=asciicast

时间: 2024-08-26 04:28:20

RailsCase27 Cross Site Scripting 跨站点脚本攻击的相关文章

Cross Frame Script (跨框架脚本) 攻击

一.Cross Frame Script (跨框架脚本) 攻击 什么是Cross Frame Script? 很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器打开. <html> <head> <title>IE Cross Frame Scripting Restriction Bypass Example</title> <script> var keylog=''; document.onkeypr

【安全编码实践】保护自己免受跨站点脚本攻击

声明:本文由Bypass整理并翻译,仅用于安全研究和学习之用. 文章来源:https://medium.com/bugbountywriteup/how-to-write-secure-code-b2757b59cd4b 如何编写安全代码?保护自己免受跨站点脚本攻击! 过去几个月我一直致力于安全代码实践,我一直在努力与社区讨论易于采用的方法.我们每天看到的不安全代码的数量确实令人震惊,我们都同意“预防胜于治疗”. 保持我们的代码和应用程??序安全的最佳方法是从一开始就正确编程.编写安全代码并不困

跨站点脚本攻击

介绍 XSS是跨站脚本攻击(Cross Site Scripting)的缩写.XSS是因为有些恶意攻击者往Web页面中插入恶意Script代码,当用户浏览该页面时,嵌入的Script代码将会被执行,从而达到恶意攻击用户的特殊目的. 条件 攻击者需要向web页面注入恶意代码: 这些恶意代码能够被浏览器成功的执行. 类型 XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的,攻击是一次性的. XSS存储型攻击,恶意代码被保存到目标网站的服务器中,这

跨站点脚本攻击(XSS)

XSS分类: (1)反射型XSS:只是简单地把用户输入的数据反射给浏览器.往往需要诱使用户"点击"一个恶意链接.也叫"非持久型XSS" (2)存储型XSS:把用户输入的数据"存储"在服务器端.也叫"持久型XSS" (3)DOM Based XSS:从效果上来说也是反射型XSS,通过修改页面的DOM结点形成的XSS. 1.cookie劫持:httponly或者将cookie和客户端IP绑定可防止 2.XSSPayload: (1

xss (Cross Site Scripting)跨站脚本攻击

XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS. XSS攻击分成两类: 一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞. 另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页.如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构

XSS 跨站脚本攻击(Cross Site Scripting)

xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制. xss攻击可以分成两种类型: 非持久型攻击 持久型攻击 下面我们通过具体例子,了解两种类型xss攻击. 1.非持久型xss攻击 顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响.非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时

跨网站脚本攻击

1 前言 近年来,随着Web2.0的大潮,越来越多的人开始关注Web安全,新的Web攻击手法层出不穷,Web应用程序面临的安全形势日益严峻.跨站脚本攻击(XSS)就是常见的Web攻击技术之一,由于跨站脚本漏洞易于出现且利用成本低,所以被OWASP开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)列为当前的头号Web安全威胁.本文将从跨站脚本漏洞的产生原理.攻击手法.检测方法和防御手段四个方面出发,全面的介绍跨站脚本漏洞的方方面面

XSS跨站点脚本的介绍和代码防御

0x01 介绍 可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务在以下情况下会发生跨站点脚本编制 (XSS) 脆弱性: [1] 不可信数据进入 Web 应用程序,通常来自 Web 请求. [2] Web 应用程序动态生成了包含此不可信数据的 Web 页面. [3] 页面生成期间,应用程序不会禁止数据包含可由 Web 浏览器执行的内容,例如 JavaScript.HTML 标记.HTML 属性.鼠标事件.Flash 和 A

跨站点脚本编制实例(AppScan扫描结果)

最近工作要求解决下web的项目的漏洞问题,扫描漏洞是用的AppScan工具,其中有很多是关于跨站点脚本编制问题的.下面就把这块东西分享出来. 原创文章,转载请注明 -----------------------------------------正题------------------------- 测试类型:应用程序级别测试 威胁分类:跨站点脚本编制 原因:未对用户输入正确执行危险字符清理 安全性风险:可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份