Web应用程序攻防实战

【.com独家翻译】想亲自击败黑客吗?OK,没问题,首先你要了解黑客是如何查找安全漏洞的,其次就是要了解黑客是如何利用Web应用程序漏洞的,最后就是了解他们是如何组织进攻的。本文将以一个漏洞百出的程序Jarlsberg为例,为大家讲解Web应用程序的攻防手段,全面解剖黑客的行径和应对办法。Jarlsberg是用Python编写的,因此略懂Python会帮助理解本文,但即使不懂也无所谓,因为漏洞和修复漏洞的方法基本上是与语言无关的。另外我们会涉及到黑盒黑客和白盒黑客,所谓黑盒黑客就是通过操纵输入字段或URL参数,观察Web应用程序的响应和变化,尝试找出让它出错的一种攻击手段,这里我们通常会查看HTTP/HTTPS请求和响应,推荐两款很棒的辅助工具Burp和WebScarab;所谓白盒黑客就是分析Web应用程序源代码,尝试找出bug并进行攻击的手段。

你完全可以根据本文介绍的内容搭建一个渗透测试环境,自己做做练习,以提升自己的技能,当然最重要的是通过学习达到举一反三,以后自己也能发现和修复漏洞,Jarlsberg的下载地址是http://jarlsberg.appspot.com/jarlsberg-code.zip,你也可以直接访问http://jarlsberg.appspot.com/start,AppEngine会自动为你创建一个新的Jarlsberg实例,每个实例都运行在独立的沙盒中,用唯一的ID进行标识,你可以随意展开攻击,你也可以将你唯一的URL分享给其它人进行攻击研究。

如果想在本地运行Jarlsberg,需要先安装Python 2.5,其它版本可能不行,执行Jarlsberg安装的命令如下:

$ cd

$ ./jarlsberg.py
 

用localhost:8008替换所有文件中的jarlsberg.appspot.com,并用分配给你的唯一ID替换默认ID 123。

如果是直接在AppEngine上创建的Jarlsberg实例,它有诸多限制,如不能访问和干扰其它Jarlsberg实例,资源使用也是有限制的,如果你捣鼓得Jarlsberg实例无法运行时,可以通过下面的URL进行重置,不过要注意的是所有历史数据都将被清除掉。

http://jarlsberg.appspot.com/resetbutton/123

注意用你自己的ID替换这里的123。

Jarlsberg各个源文件介绍:

◆jarlsberg.py是Jarlsberg Web服务器

◆jdata.py在数据库中存储默认数据,有一个管理员账号和两个默认用户

◆jtl.py是Jarlsberg模板语言

◆jsanitize.py是Jarlsberg保护自身HTML免受攻击的模块

◆resources/…目录下存放了所有模板,图片和CSS等文件

跨站脚本(XSS)

跨站脚本(XSS)指的是黑客通过网站漏洞在不受自己控制的网站内容(通常是HTML或JavaScript)中植入代码,当受害者浏览这样的网页时,植入的代码就会在受害者浏览器中执行,这样就可以顺理成章地窃取受害者与网站请求相关的个人信息。

在一个反射式XSS攻击中,攻击通常是嵌入在请求URL中,受害者浏览黑客构造的恶意URL时就被攻击了。在存储式XSS攻击中,攻击者将攻击代码保存在应用程序内,受害者浏览到这样的网页时就触发攻击代码的执行。

假设http://www.google.com/search?q=flowers这个URL返回的页面包含以下HTML片段:

Your search for 'flowers'

returned the following results:

查询参数q的值被嵌入到Google返回的页面中,如果www.google.com不做任何验证或忽略q,攻击者就可以构造一个类似下面这样的链接进行攻击尝试:


http://www.google.com/search?q=flowers+%3Cscript%3Eevil_script()%3C/script%3E

接下来就是欺骗受害者点击这个链接,当受害者点击这个链接后,他的浏览器就会解析下面的代码:

Your search for 'flowers'

returned the following results:

浏览器就会执行evil_script(),于是受害者的浏览器状态和所有该域名对应的cookies都全部暴露出来了。

有时即使受害者不直接地点击恶意链接也会遭受攻击,例如,假设攻击者拥有www.evil.example.com域名,在页面中用包含一个恶意链接,这是受害者只要访问<a%20href=”http://www.evil.example.com”>www.evil.example.com</a>,就会被暗中攻击。#p#</p> <p><strong>XSS挑战</strong></p> <p>一般说来,当其他用户浏览一个网页时,你可以让一段JavaScript代码在这个网页上执行,就说明它有XSS漏洞,一个简单有效的JavaScript函数是alert(),它会弹出一个窗口。</p> <p>你可能认为插入一个alert消息不会有任何危险,但如果你能够插入alert(1),那么插入其它恶意代码,如eval(String.fromCharCode(…))也就没有问题了。</p> <p>我们的挑战是发现Jarlsberg中的XSS漏洞,在哪些地方去找这个漏洞呢?一个是URL,另一个是存储的数据。因为XSS漏洞通常包含在那些不能正确处理非受信用户数据的应用程序中,发现XSS漏洞的方法通常是在输入字段中输入任意文字,再看响应的HTML代码变化。我们先来做一个简单的尝试。</p> <p><strong>文件上传XSS</strong></p> <p>任务:你能上传一个文件,让你在jarlsberg.appspot.com域名上执行任意脚本吗?</p> <p>暗示:你可以上传一个包含脚本的HTML文件。</p> <p>攻击:上传一个.html文件,包含以下脚本</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p><script></p><p>alert(document.cookie);</p><p></script></p></pre> </td> </tr> </tbody> </table> <p>修复:在一个独立的域名上托管内容,这样脚本就不能访问你域名上的任何内容了,也就是说,我们应该用username.usercontent.example.com或username.example-usercontent.com这样的域名代替example.com/username托管用户的内容,另外还要注意不要让用户可以注册注入wwww等容易引起钓鱼攻击的用户名。</p> <p><strong>反射式XSS</strong></p> <p>有趣的是,有些浏览器内置了防反射式XSS攻击,如IE和Chrome,另外也有一些浏览器扩展,如NoScript也能提供这样的保护,为了解决这个问题,Jarlsberg特意在每个HTTP响应头中加入了X-XSS-Protection: 0,让IE可以识别,如果是Chrome,你可以通过disable-xss-auditor启动参数禁用反射式XSS保护。</p> <p>如果你使用的是Firefox,并安装了NoScript扩展,请将jarlsberg.appspot.com列入允许列表,如果还不行,最好换个其它浏览器。</p> <p>也许你认为既然浏览器有了保护能力,为什么还需要担心这种攻击呢?其实浏览器并不能完全准确地实施保护,因为它不了解你的应用程序,聪明的黑客是可以绕过这层保护机制的,真正的保护是从应用程序源头杜绝XSS漏洞。</p> <p>任务:找出一个反射式漏洞,我们希望通过点击一个URL执行一个脚本。</p> <p>提示1:这个URL是什么呢?</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><a%20href=”http://jarlsberg.appspot.com/123/invalid”>http://jarlsberg.appspot.com/123/invalid</a></pre> </td> </tr> </tbody> </table> <p>提示2:在URL中最危险的字符是<和>,尝试输入下面的URL:</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p><a%20href=”http://jarlsberg.appspot.com/123/%3e%3c”>http://jarlsberg.appspot.com/123/%3e%3c</a></p><p><a%20href=”http://jarlsberg.appspot.com/123/%253e%253c”>http://jarlsberg.appspot.com/123/%253e%253c</a></p><p><a%20href=”http://jarlsberg.appspot.com/123/%c0%be%c0%bc”>http://jarlsberg.appspot.com/123/%c0%be%c0%bc</a></p><p><a%20href=”http://jarlsberg.appspot.com/123/%26gt;%26lt”>http://jarlsberg.appspot.com/123/%26gt;%26lt</a>;</p><p><a%20href=”http://jarlsberg.appspot.com/123/%26amp;gt;%26amp;lt”>http://jarlsberg.appspot.com/123/%26amp;gt;%26amp;lt</a>;</p><p><a%20href=”http://jarlsberg.appspot.com/123/\074\x3c\u003c\x3C\u003C\X3C\U003C”>http://jarlsberg.appspot.com/123/\074\x3c\u003c\x3C\u003C\X3C\U003C</a></p><p><a%20href=”http://jarlsberg.appspot.com/123/+ADw-+AD4″>http://jarlsberg.appspot.com/123/+ADw-+AD4</a>-</p></pre> </td> </tr> </tbody> </table> <p>以上的URL是通过不同语言风格构造的<和>,直接在浏览器地址栏输入<和>是一样的,浏览器会自动编码,然后查看返回的HTML代码,研究服务器对这些URL的响应。</p> <p>攻击:创建下面这样一个URL,让受害者点击它</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><a%20href=”http://jarlsberg.appspot.com/123/<script>alert(1)</script”> http://jarlsberg.appspot.com/123/<script>alert(1)</script</a>></pre> </td> </tr> </tbody> </table> <p>修复:你需要绕过显示在错误信息中的用户输入,错误信息是使用error.jtl显示的,但没有绕过模板,提供消息的模板部分是{{message}},添加:text绕过用户输入。</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> <div class=”message”>{{_message:text}}</div></pre> </td> </tr> </tbody> </table> <p>杜绝这个漏洞的最好办法是避免所有默认的输出,仅显示原始HTML。#p#</p> <p><strong>存储式XSS</strong></p> <p>任务:现在我们来寻找一个存储式XSS,我们想做的是在Jarlsberg内部放置一小段代码,其它人访问时就执行它。</p> <p>提示1:放置下面这段代码看看效果</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> <script>alert(1)</script></pre> </td> </tr> </tbody> </table> <p>将脚本嵌入到文档有很多方式。</p> <p>提示2:黑客不会限制他们自己验证HTML语法,试试一些无效的网页,看看会返回什么,你可能需要试验一下,以便找到下手的地方。</p> <p>攻击:嵌入下面任意一种代码片段</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p>(1) <a onmouseover=”alert(1)” href=”#”>read this!</a></p><p>(2) <p <script>alert(1)</script>hello</p><p>(3) </td <script>alert(1)</script>hello</p></pre> </td> </tr> </tbody> </table> <p>修复:在jsanitize.py文件_SanitizeTag部分中,将onmouseover添加到disallowed_attributes列表中,可以预防片段1的攻击。</p> <p>但这种修复方法不彻底,因为检查不允许的属性时是区分大小写的,而HTML则不区分大小写,正确的做法是:</p> <p>1、将输入解析为一个中间DOM结构,然后以良好的格式输出;</p> <p>2、为允许的标记和属性使用严谨的白名单;</p> <p>3、对允许的URL和CSS属性采用严格的净化处理。</p> <p>在条件允许的情况下,最好使用一个HTML净化器。</p> <p><strong>通过HTML属性进行存储式XSS</strong></p> <p>任务:你也可以在HTML属性上注入值来实施XSS,如通过设置配置文件中的颜色值植入一段脚本。</p> <p>提示1:颜色是使用style=’color:color’渲染的,试试在颜色名中包含一个单引号字符的效果。</p> <p>提示2:你可以插入一个HTML属性执行一个脚本。</p> <p>攻击:使用的下面的代码设置颜色</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> red’ onload=’alert(1)’ onmouseover=’alert(2)</pre> </td> </tr> </tbody> </table> <p>当你鼠标移到它上面时就触发了攻击。</p> <p>修复:我们需要一个正确的文字转义程序,有效地规避单引号和双引号,将下面的函数增加到jtl.py,用它替代cgi.escape。</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <p>def _EscapeTextToHtml(var):  </p> <p>”””Escape HTML metacharacters.</p> <p>This function escapes characters that are</p> <p>dangerous to insert into</p> <p>HTML. It prevents XSS via quotes or script</p> <p>injected in attribute values.</p> <p>It is safer than cgi.escape, which escapes only</p> <p><, >, & by default.   cgi.escape can be told to</p> <p>escape double quotes, but it will never </p> <p>escape single quotes.   “””</p> <p>meta_chars = {       ‘”‘: ‘"’,       ‘\”:</p> <p>’'’,  # Not '       ‘&’: ‘&’,      </p> <p>’<’: ‘<’,<       ‘>’: ‘>’,       }  </p> <p>escaped_var = “”   for i in var:     if i in</p> <p>meta_chars:       escaped_var = escaped_var +</p> <p>meta_chars[i]     else:       escaped_var =</p> <p>escaped_var + i   return escaped_var</p> </td> </tr> </tbody> </table> <p>但这种修复方法仍然不完美,颜色值仍然存在漏洞。</p> <p>提示1:有些浏览器允许你在样式表中包含脚本。</p> <p>提示2:最容易遭到利用的浏览器是IE,因为它支持动态CSS属性(也叫做CSS表达式)。</p> <p>攻击方法:使用下面的代码替换颜色值</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> expression(alert(1))</pre> </td> </tr> </tbody> </table> <p>虽然其它浏览器不支持动态CSS属性,但一样存在其它危险的CSS属性,如Mozilla的-moz-binding。</p> <p>修复办法:我们需要将颜色值净化为一个真正的颜色值,最好的办法是增加一个新的输出净化格式给jtl,例如,我们可能会书写{{foo:color}}确保foo被安全地用作一个颜色,下面这个函数可以用来净化。</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p>SAFE_COLOR_RE = re.compile(r”^#?[a-zA-Z0-9]*$”)</p><p>def _SanitizeColor(color):  <br /> </p><p>”””Sanitizes a color, returning ‘invalid’ if it’s invalid.</p><p>A valid value is either the name of a color or # followed by the</p><p>h code for a color (like #FEFFFF). Returning an invalid value<br /> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p>value allows a style sheet to specify a default value by writing  ‘color:default; color:{{foo:color}}’.  “””</p><p>if SAFE_COLOR_RE.match(color):   </p><p>return color<br /> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p>return ‘invalid’</p></pre> </td> </tr> </tbody> </table> <p>你可以为字体大小,字体,URL等做类似的净化,它对输入验证也很有帮助,如果有人输入了一个无效值,你可以立即提醒或是拒绝他,但光做输入验证还不够,如果你的验证代码本身也有漏洞,或是浏览器暴出新的攻击向量,你不得不返回重新清洗之前全部输入的值,或是增加输出验证。#p#</p> <p><strong>通过Ajax进行存储式XSS</strong></p> <p>任务:使用Jarlsberg Ajax代码中的bug找出一个XSS攻击点,当你点击页面刷新链接时触发攻击。</p> <p>提示1:在<a%20href=”http://jarlsberg.appspot.com/123/feed.jtl”>http://jarlsberg.appspot.com/123/feed.jtl</a>上运行curl查看结果,或者在浏览器中输入这个URL,查看返回结果的HTML源代码,你会看到每个用户的第一个微博包含在响应包中,然后整个响应包在客户端接受评估,最后将微博内容插入到文档中,你能够在微博内容中加入点什么使其与预期的结果有所不同吗?</p> <p>提示2:在你的微博内容中添加一个双引号试试。</p> <p>利用方法:将下面的代码插入到你的微博内容中。</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p>all <span style=display:none>”</p><p>+ (alert(1),””)</p><p>+ “</span>your base</p></pre> </td> </tr> </tbody> </table> <p>JSON看起来应该象</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> _feed(({…, “Mallory”: “snippet”, …}))</pre> </td> </tr> </tbody> </table> <p>代替后看起来象</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p>_feed({…, “Mallory”: “all <span style=display:none>”</p><p>+ (alert(1),””)</p><p>+ “</span>your base”, …})<br /> </p></pre> </td> </tr> </tbody> </table> <p>注意,每个下划线部分都是一个独立的表达式,这个攻击是不可见的,因为使用了<span style=display:none>,即使刷新后也是不可见的,因为它只插入了一个空字符串,存在这种可利用的漏洞表明服务器端和客户端都有bug。</p> <p>修复办法:首先,在服务器端,原文在JSON响应中呈现时转义就不正确,虽然模板声明了{{snippet.0:html}},但仍然不够,原文将被插入到DOM节点的内部HTML中,因此HTML必须进行净化,但净化后的原文将被插入到JavaScript中,单引号和双引号将被转义,给jtl增加{{…:js}}支持是不够的,我们也需要支持{{…:html:js}}。</p> <p>如果要转义单引号和双引号,分别使用\x27和\x22,用和"替代它们是不正确的,因为JavaScript是不能识别和"的。</p> <p>其次,在浏览器中,Jarlsberg使用JavaScript的eval转换JSON,通常情况下,使用eval非常危险,我们应该使用JSON解析器确保字符串不包括任何不安全的内容,json.org就提供了JSON解析器下载。</p> <p><strong>通过Ajax实施反射式XSS</strong></p> <p>任务:使用Jarlsberg的Ajax功能,找出一个URL,点击它就执行一个脚本。</p> <p>提示1:Jarlsberg刷新用户的微博页面时,使用了:</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><a%20href=”http://jarlsberg.appspot.com/123/feed.jtl?uid=value”>http://jarlsberg.appspot.com/123/feed.jtl?uid=value</a></pre> </td> </tr> </tbody> </table> <p>结果是脚本</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> _feed(([“user”, “snippet1″, … ]))</pre> </td> </tr> </tbody> </table> <p>提示2:这里使用了不同的漏洞,但和前面的反射式XSS利用方法是类似的。</p> <p>攻击方法:创建类似下面这样的URL,诱使受害者点击它</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p><a%20href=”http://jarlsberg.appspot.com/123/feed.jtl?uid=<script>alert(1)</script”>http://jarlsberg.appspot.com/123/feed.jtl?uid=<script>alert(1)</script</a>></p><p><a%20href=”http://jarlsberg.appspot.com/123/feed.jtl?uid=%3Cscript%3Ealert(1)%3C/script%3E”>http://jarlsberg.appspot.com/123/feed.jtl?uid=%3Cscript%3Ealert(1)%3C/script%3E</a></p></pre> </td> </tr> </tbody> </table> <p>它们被翻译为</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> _feed(([“<script>alert(1)</script>”]))</pre> </td> </tr> </tbody> </table> <p>这个bug让Jarlsberg返回了所有文件类型为text/html的jtl文件。</p> <p>修复办法:需要确保JSON内容不会当作HTML解析,需要修改{{…:js}},用JavaScript转移字符\x3c和\x3e进行替换,在JavaScript中用\x3c和\x3e分别替换<和>总是安全的,注意,用HTML转移字符<和>也是不正确的。</p> <p>同时,你还应该设置响应的内容类型,这里我们使用application/javascript。</p> <p>此外,Jarlsberg也未设置内容编码,浏览器会尝试根据文档内容进行猜测,攻击者也可以利用这个漏洞欺骗浏览器,如攻击者使用UTF-7编码欺骗浏览器,于是就可以嵌入+ADw-script+AD4-脚本标记,在UTF-7中,+ADw-和+AD4-分别代表<和>,因此不仅要设置正确的内容类型,编码也要设置,设置方法和HTML类似,如:</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> Content-Type: text/html; charset=utf-8</pre> </td> </tr> </tbody> </table> <p>虽然没有一种万能的方法来防御XSS漏洞,但仍然有一些重要的原则应该遵守。</p> <p>1、首先确保你弄明白了问题;</p> <p>2、尽可能通过模板功能净化,尽量不要直接在代码中使用转义字符进行净化;</p> <p>3、实施XSS相关的测试;</p> <p>4、不要试图自己写模板库。 #p#</p> <p><strong>客户端状态操纵</strong></p> <p>用户与Web应用程序交互是通过浏览器进行的,点击一个按钮或是提交一个表单,浏览器都会将请求发送给Web服务器,因为浏览器很容易被黑客控制,因此Web服务器不应该相信任何浏览器发来的数据。</p> <p>写一个Web应用程序也不相信任何数据似乎不太可能,也没那个必要,如用户提交一个表单表示他想购买的商品列表,这时信任它也无妨,但如果提交的表单也包含价格信息,那就应该谨慎了。</p> <p><strong>特权提升</strong></p> <p>任务:将你的帐户升级成管理员</p> <p>提示:一般用户和管理员都使用editprofile.jtl编辑自己的配置信息,如果你不是管理员,这个页面看起来会有所不同。</p> <p>攻击方法:使用下面任意一个URL都可以将你的普通帐户转换成管理员</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p><a%20href=”http://jarlsberg.appspot.com/123/saveprofile?action=update&is_admin=True”>http://jarlsberg.appspot.com/123/saveprofile?action=update&is_admin=True</a></p><p><a%20href=”http://jarlsberg.appspot.com/123/saveprofile?action=update&is_admin=True&uid=username”>http://jarlsberg.appspot.com/123/saveprofile?action=update&is_admin=True&uid=username</a></p></pre> </td> </tr> </tbody> </table> <p>第二个URL可以通过替换username将任何一个普通用户升级成管理员。</p> <p>由于Cookie的问题,你可能看到帐户状态不是立即显示为管理员,只要你注销重新登录就可以了。</p> <p>修复办法:这里的bug是服务器端代码缺少身份验证引起的,正确的做法是在服务器端检查授权。</p> <p><strong>Cookie操纵</strong></p> <p>因为HTTP协议是无状态的,Web无法知道某两个请求来自同一个用户,就是在这种背景下,Cookie诞生了,当一个网站在HTTP响应中引入Cookie后,浏览器在下一次请求时就会自动发送Cookie,网站可以使用Cookie保存会话状态,Jarlsberg使用Cookie记住登录用户的身份,因为Cookie是保存在客户端的,因此很容易受到操纵,Jarlsberg为了保护Cookie专门增加了一个散列,遗憾的是,实施攻击不一定需要破坏散列。</p> <p>任务:让Jarlsberg为你生成其它用户的Cookie。</p> <p>提示:Jarlsberg的Cookie格式如下</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> hash|username|admin|author</pre> </td> </tr> </tbody> </table> <p>当你登录时Jarlsberg为你生成一个Cookie。</p> <p>攻击方法:使用“foo|admin|author”作为用户名创建一个新用户,然后用它登录,Jarlsberg产生“hash|foo|admin|author||author”Cookie,于是foo成为管理员,因此这也算是一种特权提升攻击。</p> <p>修复办法:由于系统对用户名没有任何字符限制才导致攻击可以得逞,因此在构造Cookie时要对用户名进行转义,如果与预期的模式不能匹配,就拒绝为其产生Cookie。</p> <p><strong>跨站请求伪造(XSRF)</strong></p> <p>前面我们曾提到,如果用户提交的表单仅仅表示他希望购买的商铺列表,那信任这些数据也无妨,只要确保是这个用户提交的数据即可,如果你的网站有XSS漏洞,即使你已经实施了XSS保护,但还有另一种攻击需要保护,那就是跨站请求伪造。</p> <p>浏览器向网站发送请求时,它也会将该网站的Cookie一并发送,Web服务器不会区分请求是否有用户行为(如用户点击提交按钮,或是页面中嵌入的一个图片),因此,当网站接收到一个请求要执行一些动作时(如删除邮件,修改联系人信息等),Web服务器不知道这些行为是否是用户真正的本意,即使请求中包含了Cookie也证明不了,攻击者可以利用这个漏洞欺骗服务器,执行非用户本意想要执行的动作。</p> <p>例如,假设Blogger有XSRF漏洞,在页面上有一个删除按钮,其对于的URL是:</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><a%20href=”http://www.blogger.com/deleteblog.do?blogId=BLOGID”>http://www.blogger.com/deleteblog.do?blogId=BLOGID</a></pre> </td> </tr> </tbody> </table> <p>攻击者Bob在他自己的网页<a%20href=”http://www.evil.example.com”>http://www.evil.example.com</a>中嵌入下面的HTML代码:</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> <img src=”<a%20href=”http://www.blogger.com/deleteblog.do?blogId=alice’s-blog-id”>http://www.blogger.com/deleteblog.do?blogId=alice’s-blog-id</a>”<br />    <br />style=”display:none”></pre> </td> </tr> </tbody> </table> <p>如果受害者Alice登录到<a%20href=”http://www.blogger.com”>www.blogger.com</a>,当她浏览上面的页面时,会发生:</p> <p>◆她的浏览器从<a%20href=”http://www.evil.example.com”>http://www.evil.example.com</a>载入页面,之后浏览器尝试载入页面中嵌入的所有对象,包括这里的img对象;</p> <p>◆浏览器向<a%20href=”http://www.blogger.com/deleteblog.do?blogId=alice’s-blog-id”>http://www.blogger.com/deleteblog.do?blogId=alice’s-blog-id</a>产生一个请求,载入图片,由于Alice已经登录到Blogger,她就有一个Blogger Cookie,浏览器也会在请求中发送该Cookie;</p> <p>◆Blogger验证Cookie是一个有效的会话Cookie,然后验证alice’s-blog-id对应的博客是否属于Alice,如果是就删除该博客;</p> <p>◆Alice不知道是什么原因造成自己的博客就没有了。</p> <p>在这个攻击示例中,因为每个用户有他们自己的博客id,攻击目标是单个用户,但在很多时候,类似这样的攻击可以针对批量用户,批量数据。</p> <p><strong>XSRF挑战</strong></p> <p>这里的目标是找到一个方法代表登录Jarlsberg的用户执行账号修改行为,但真正的用户并不知情,假设你可以正常访问一个网页。</p> <p>任务:找到一个方法让某个人删除他们的Jarlsberg微博内容。</p> <p>提示:删除一个微博内容用到的URL是什么?</p> <p>攻击方法:诱使用户访问产生下列请求的页面</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><a%20href=”http://jarlsberg.appspot.com/123/deletesnippet?index=0″>http://jarlsberg.appspot.com/123/deletesnippet?index=0</a></pre> </td> </tr> </tbody> </table> <p>为了达到更好的迷惑性,我们将Jarlsberg图标加在这个URL上。</p> <p>修复办法:我们首先应该修改/deletesnippet通过POST请求工作,因为这是一个状态改变行为,按照HTML形式,将method=’get’修改为method=’post’。在服务器端,GET和POST请求除了调用不同的处理程序外,它们都一样,例如,Jarlsberg使用Python的BaseHTTPServer为GET请求调用do_GET,为POST请求调用do_POST。</p> <p>但仅仅修改为POST并是完美的修复方法,只能说使用POST是正确的做法,因为GET请求是可以重新发出的,而POST请求是不能重新发出的,我们需要传递一个唯一的,不可预知的认证令牌action_token给用户,可以使用用户Cookie和当前时间戳的哈希值,在所有改变状态的HTTP请求中作为一个附加HTTP参数包含这个令牌,使用时间戳的目的是可以让过期的令牌失效,即使它被泄露出去,因时效性问题,引起的影响也会很小。</p> <p>在处理一个请求时,Jarlsberg应该重新生成令牌,与请求提供的令牌进行比较,如果相同就执行行为,否则就拒绝它,生成和验证令牌的函数如下:</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p>def _GenerateXsrfToken(self, cookie):  “””Generates a timestamp and XSRF token for all state changing actions.”””</p><p>timestamp = time.time()  return timestamp + “|” + (str(hash(cookie_secret + cookie + timestamp)))</p><p>def _VerifyXsrfToken(self, cookie, action_token):  “””Verifies an XSRF token included in a request.”””</p><p># First, make sure that the token isn’t more than a day old.  (action_time, action_hash) =</p><p>action_token.split(“|”,1)  now = time.time()  if now – 86400 > float(action_time):    return False</p><p># Second, regenerate it and check that it matches the user supplied value<br />  hash_to_verify = str(hash(cookie_secret + cookie + action_time)  return action_hash == hash_to_verify</p></pre> </td> </tr> </tbody> </table> <p>很遗憾,这个函数仍然有问题。</p> <p>因为令牌中包含时间,我们必须防止它永久有效,如果攻击者获得一个令牌的拷贝,他可以在24小时内反复使用它就麻烦了,令牌的过期时间应尽可能设得短一点,即使请求被攻击者拦截,也只能攻击一次,攻击者不能反复利用这个请求,令牌应该和特定的状态改变行为联系起来,如一个页面的URL,对于非常长的行为,如编辑一个微博,页面上的脚本可以查询服务器更新令牌。</p> <p>XSRF漏洞的存在让攻击者可以轻易构造一系列请求,为了阻止这种攻击,需要引入一些不可预知的值,让攻击者不是那么容易构造伪造的请求,有些应用程序框架内置了XSRF保护,它们会在每个响应中包含一个唯一的令牌,并且会验证每个POST请求。#p#</p> <p><strong>跨站脚本置入(XSSI)</strong></p> <p>浏览器可以阻止一个域名下的网页读取另一个域名下的网页,但它不能阻止一个域名下的网页引用另一个域名下的资源,特别是它们允许引用另一个域名下的图片,执行另一个域名下的脚步,引用的脚本无自己的安全上下文,它完全依赖引用它的页面的安全上下文,例如,如果<a%20href=”http://www.evil.example.com”>www.evil.example.com</a>包含了一个托管在<a%20href=”http://www.google.com”>www.google.com</a>上的脚本,这个脚本就运行在evil上下文而不是google上下文中,因此这个脚本中包含的任何用户数据都可能被泄露。</p> <p><strong>XSSI挑战</strong></p> <p>任务:使用XSSI找到一个阅读他人私有微博的方法。</p> <p>在另一个网站上创建一个网页,在这个网页中插入一些代码,使其可以访问你的私有微博内容。</p> <p>提示1:将下面的代码添加到你的HTML页面,你可以从另一个域名运行脚本</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> <SCRIPT src=”<a%20href=”http://jarlsberg.appspot.com/123/…”></SCRIPT”>http://jarlsberg.appspot.com/123/…”></SCRIPT</a>></pre> </td> </tr> </tbody> </table> <p>提示2:feed.jtl是一个脚本。</p> <p>攻击方法:将下面的代码插入一个HTML文件中</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p><script></p><p>function _feed(s) {<br />  <br />alert(“Your private snippet is: ” + s[‘private_snippet’]);</p><p>}</p><p></cript></p><p><script src=”<a%20href=”http://jarlsberg.appspot.com/123/feed.jtl”></script”>http://jarlsberg.appspot.com/123/feed.jtl”></script</a>></p></pre> </td> </tr> </tbody> </table> <p>当feed.jtl中的脚本被执行时,它运行在攻击者页面的上下文中。</p> <p>修复办法:首先使用XSRF令牌确保包含机密数据的JSON结果只会返回给你自己的页面,其次,你的JSON响应页面应该只支持POST请求,防止通过脚本标记载入脚本,第三,要确保脚本是不可执行的,标准的做法是增加一些不可执行的前缀,如])}while(1);</x>,相同域名下的脚本可以读取响应的内容,自动卸掉前缀,但运行在另一个域名的脚本就不能读取响应的内容。</p> <p><strong>路径遍历</strong></p> <p>一般来说,一个Web应用程序包含很多静态文件,如图片,CSS,JS文件等,正常情况下有些文件的访问是要经过验证的,但如果不小心,可能导致攻击者越权遍历整个网站的目录,例如,在Windows和Linux下,..代表父目录,如果你能在访问路径中注入../,那就意味着你可以访问到父目录中的文件。</p> <p>如果攻击者知道你的文件系统结构,那么他们可以构造一个URL遍历网站目录以外的目录,甚至是/etc,例如,如果Picasa有路径遍历漏洞,Picasa使用Unix类系统,那么下面的URL将可以窃取到系统密码文件:</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><a%20href=”http://www.picasa.com/../../../../../../../etc/passwd”>http://www.picasa.com/../../../../../../../etc/passwd</a></pre> </td> </tr> </tbody> </table> <p><strong>通过路径遍历暴露信息</strong></p> <p>任务:找到一个方法从Jarlsberg服务器读取secret.txt。</p> <p>这种攻击在许多情况下不是必需的,人们安装程序时往往不会修改默认位置,因此攻击者首先会尝试默认路径遍历。</p> <p>提示1:这不是一个黑盒攻击,因为你需要知道secret.txt文件是否存在,它位于哪里,以及Jarlsberg将它的资源文件存储在哪里,你不需要查看任何源代码。</p> <p>提示2:服务器如何知道哪个URL表示资源文件,你可以使用curl或Web代理构造一个请求URL。</p> <p><strong>攻击方法:通过下面的URL窃取secret.txt</strong></p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><a%20href=”http://jarlsberg.appspot.com/123/../secret.txt”>http://jarlsberg.appspot.com/123/../secret.txt</a></pre> </td> </tr> </tbody> </table> <p>有些浏览器,如Firefox和Chrome,优化了URL中的../输出,但这不能提供任何安全保障,因为攻击者可以使用类似curl、Web代理或是没做这种优化的浏览器等工具。</p> <p>修复办法:我们需要阻止访问资源目录以外位置的文件,验证文件路径的办法有点麻烦,因为有很多种隐藏../或~等路径元素的办法,最佳的保护办法是只服务特定的资源文件,可以将其硬编码进你的应用程序,只接收访问这些文件的请求,如果非要做文件路径验证,那也只能对最终路径进行验证,而不是对URL进行验证,因为URL中的字符是可以转义的。</p> <p><strong>通过路径遍历进行数据篡改</strong></p> <p>任务:找到一个办法替换掉处于运行中的Jarlsberg服务器上的secret.txt。</p> <p>提示:如果我以用户brie登录并上传一个文件,服务器会将它存放在哪里?你可以欺骗服务器将上传文件替换掉../secret.txt吗?</p> <p>攻击方法:创建一个新用户..,上传你的secret.txt,你也可以创建一个名叫brie/../..的用户来达到同样的目的。</p> <p>修复办法:需要对用户名进行危险字符转义,我们应该限制用户名允许的字符,另外还需要转换大小写,因为Windows下的文件名是不区分大小写的,而Jarlsberg要区分。</p> <p><strong>拒绝服务(DoS)</strong></p> <p>拒绝服务攻击就是让服务器超负荷处理伪造的请求,使其无法为正常的请求提供服务,保护应用程序防止这种攻击超出了本文的范围,对Jarlsberg的DoS攻击将会转化为对App Engine的攻击。下面的任务是找出Jarlsberg中可以用来执行DoS攻击的bug。</p> <p><strong>DoS – 服务器停机攻击</strong></p> <p>最简单的攻击办法就是让服务器停机。</p> <p>任务:找出让服务器停机的办法。</p> <p>提示:管理员可以关闭服务器,管理页面是manage.jtl。</p> <p>攻击方法:向<a%20href=”http://jarlsberg.appspot.com/123/quitserver”>http://jarlsberg.appspot.com/123/quitserver</a>发送一个请求。</p> <p>修复办法:只允许管理员访问/quitserver。</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre><p>_PROTECTED_URLS = [<br />    <br />”/quitserver”,<br />    <br />”/reset”</p><p>]</p></pre> </td> </tr> </tbody> </table> <p><strong>DoS – 服务器超负荷攻击</strong></p> <p>任务:找到一个让服务器处理一个请求就超负荷工作的方法。</p> <p>提示:可以上传一个模板来实现,每个页面都包含menubar.jtl模板。</p> <p>攻击方法:创建menubar.jtl文件,包含</p> <table border=”1″ cellspacing=”0″ bordercolorlight=”#000000″ bordercolordark=”#ffffff” cellpadding=”2″ width=”400″ align=”center”> <tbody> <tr> <td class=”code” bgcolor=”#e6e6e6″> <pre> [[include:menubar.jtl]]DoS[[/include:menubar.jtl]]</pre> </td> </tr> </tbody> </table> <p>使用路径遍历攻击将其上传到resources目录。</p> <p>修复办法:和前面一样,实现路径遍历保护。</p> <p><strong>代码执行</strong></p> <p>如果攻击者能远程在你服务器上执行任意代码,那表示你玩完了,遗憾的是目前也没有一个万能的方法来预防远程代码执行,因此只有靠程序本身进行验证。</p> <p>攻击方法:通过修改jtl.py,置入恶意代码,然后上传替换掉原来的jtl.py,通过<a%20href=”http://jarlsberg.appspot.com/123/quitserver”>http://jarlsberg.appspot.com/123/quitserver</a>让服务器关机,等它重启后,置入的恶意代码就开始工作了。</p> <p>Jarlsberg也有这个漏洞,因为Jarlsberg目录允许写入文件,这违背了最小权限原则。</p> <p>修复办法:修复前面两个漏洞即可。</p> <p><strong>配置漏洞</strong></p> <p>黑客们都非常熟悉常用应用系统的默认设置,如按照目录,默认管理员用户和密码等,如果配置不当,也相当于暴露了系统的漏洞。我们常见的如调试选项默认被开启,默认的状态页,堆栈转储跟踪等都属于配置漏洞。</p> <p><strong>信息泄露</strong></p> <p>比如通过<a%20href=”http://jarlsberg.appspot.com/123/dump.jtl”>http://jarlsberg.appspot.com/123/dump.jtl</a>就可以暴露出Jarlsberg的数据库内容,唯一的办法就是删除/dump.jtl,如果非要开启调试功能,那最好只允许管理员访问,同时开启IP地址访问限制。</p> <p>通过暴库,我们可以获得系统用户名和密码,因此密码最好使用哈希值保存。</p> <p>虽然我们可以删除原始的dump.jtl,但Jarlsberg有文件上传漏洞,因此攻击者可以构造自己的dump.jtl,我们只能限制用户上传,或是用户上传的文件不能和Web应用程序位于同一位置,另外也可以限制上传的文件类型。</p> <p><strong>总结</strong></p> <p>Web应用程序的安全涉及的内容很多,从代码到配置都必须引起重视,可能一个小小的失误就会导致整个服务器被攻击者控制,安全从来就是相对的,攻防技术是不断发展和变化的,加强学习和实战是提高的唯一办法。  </p> <p>【.COM 独家翻译,转载请注明出处及作者!】</p> <p>【编辑推荐】</p> <ol> <li><a%20href=”http://netsecurity./art/201003/186669.htm%20″>黑客WEB攻击新动向:劫持域名换手法</a></li> <li><a%20href=”http://netsecurity./art/201005/199281.htm%20″>黑帽搜索引擎毒化Web安全环境</a></li> </ol> </div> <div class=”article-bottom”><span>责任编辑:许凤丽</span> <span> 来源: .com</span></div> <div class=”article-tags”><a%20href=”https://so./?keywords=%E9%BB%91%E5%AE%A2″ target=”_blank” class=”tag-item”>黑客</a><a%20href=”https://so./?keywords=Web%E5%AE%89%E5%85%A8″ target=”_blank” class=”tag-item”>Web安全</a></div></article> <div class=”zan”><img src=”https://s5-media./cms/client/img/zanpc.bd208a1.png” alt> <img src=”https://s5-media./cms/client/img/zanpchover.fdd60ba.png” alt class=”unhover”></div> <div class=”share”><div class=”share-item”><img src=”https://s5-media./cms/client/img/weixin.23cd8b3.png” alt> <span>分享到微信</span> <div class=”wx-show” style=”display:none;”><div id=”qrcodediv2″></div> <p>微信扫码分享</p></div></div> <div class=”share-item”><img src=”https://s5-media./cms/client/img/weibo.16d6b4f.png” alt> <span>分享到微博</span></div></div> <section class=”relevant-recommend”><div class=”title”>相关推荐</div> <div class=”recommend-list”><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/266440.html” target=”_blank” class=”usehover article-irl-ct_title”><em>实战</em>:如何做iPad <em>Web</em><em>应用程序</em>开发</a> <!—-> <!—-></div> <a%20href=”https://www./article/266440.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>iPadiPhone应用程序开发和开发网站相比,需要完全不同的技巧,也许你过去多年的技术积累现在一点用场也派不上。本文介绍了如何使用现有的技能为iPad开发Web应用程序。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2011-06-01 13:20:29</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=ipad” class=”split-left-m usehover”>ipad</a><a target=”_blank” href=”https://so./?keywords=%E5%B9%B3%E6%9D%BF%E7%94%B5%E8%84%91″ class=”split-left-m usehover”>平板电脑</a><a target=”_blank” href=”https://so./?keywords=%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91″ class=”split-left-m usehover”>移动开发</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><div class=”article-irl-img usehover”><a%20href=”https://www./article/758988.html” target=”_blank”><img src=”https://s8./oss/202306/29/728958d61cfdd7d4e83327e6b6992be339dcf8.png?x-oss-process=image/resize,m_fixed,w_142,h_82″ alt></a></div> <div class=”article-irl-c split-left-l”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/758988.html” target=”_blank” class=”usehover article-irl-ct_title”>使用 Flask 构建 <em>Web</em> <em>应用程序</em>:完整<em>实战</em>教程</a> <!—-> <!—-></div> <a%20href=”https://www./article/758988.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>在这里,我们将介绍如何使用Flask构建一个完整的Web应用程序,包括使用FlaskRESTful构建RESTfulAPI、使用FlaskSQLAlchemy进行数据库操作、使用Flaskwtf进行表单验证和使用FlaskJWT进行身份认证和授权。</a></div> <div class=”article-irl-cb”><p class=”article-irl-cb_time”>2023-06-29 07:45:03</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/125899.html” target=”_blank” class=”usehover article-irl-ct_title”>Flash<em>应用程序</em>安全<em>攻防</em>战</a> <!—-> <!—-></div> <a%20href=”https://www./article/125899.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>Flash应用程序(即SWF文件)不仅可以通过web协议进行分发,并且还能读取本地或者远程文件、建立网络连接,以及跟其他SWF文件进行通信等。通过本文,您将了解具体的Flash攻击手段,有用的Flash安全审查技巧以及安全有关的开发配置技术。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2009-05-27 15:11:24</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/250194.html” target=”_blank” class=”usehover article-irl-ct_title”><em>Web</em><em>应用程序</em>平台–LAMP</a> <!—-> <!—-></div> <a%20href=”https://www./article/250194.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>用过LAMP的人们都知道,LAMP是由Linux+Apache+Mysql+PerlPHPPython一起组成的,本文来具体介绍下Web应用程序平台:LAMP</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2011-03-22 14:12:17</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=LAMP” class=”split-left-m usehover”>LAMP</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/135272.html” target=”_blank” class=”usehover article-irl-ct_title”>浅析Servlet的<em>Web</em><em>应用程序</em></a> <!—-> <!—-></div> <a%20href=”https://www./article/135272.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>本文简单介绍Servlet的Web应用程序,以及介绍载入Servlet,cookie是如何工作的和eCourt会话等。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2009-07-09 16:47:26</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=Servlet%E7%9A%84Web%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F” class=”split-left-m usehover”>Servlet的Web</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/182059.html” target=”_blank” class=”usehover article-irl-ct_title”>深度剖析Python <em>Web</em> <em>应用程序</em></a> <!—-> <!—-></div> <a%20href=”https://www./article/182059.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>PythonWeb应用程序的交互性首先表现在它的超连接上,用户的浏览顺序和所到站点完全由他自己决定,另外通过FORM的形式可以从服务器方获得动态的信息。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2010-02-01 14:05:03</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/117833.html” target=”_blank” class=”usehover article-irl-ct_title”><em>Web</em><em>应用程序</em>中的rootkit</a> <!—-> <!—-></div> <a%20href=”https://www./article/117833.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>Web是近几年的热点,各种各样的服务都开始网络化,用户的敏感信息也开始不只是存储在自己的计算机里,而开始存储在服务提供商的数据库里。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2009-04-01 14:33:33</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/341307.html” target=”_blank” class=”usehover article-irl-ct_title”>如何缓解<em>Web</em><em>应用程序</em>威胁</a> <!—-> <!—-></div> <a%20href=”https://www./article/341307.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>以业务为中心的Web互动迅速发展也带来了新的信息安全威胁,而企业以前的静态网页并没有这些威胁。这些威胁主要是针对Web应用程序,包括补充的Web服务器、数据库和其他支持基础设施。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2012-06-11 09:37:41</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/324198.html” target=”_blank” class=”usehover article-irl-ct_title”>Go语言写<em>Web</em><em>应用程序</em></a> <!—-> <!—-></div> <a%20href=”https://www./article/324198.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>Go语言写Web应用程序,涵盖内容:为载入和保存方法创建一个数据结构体,引用http包来创建一个web应用,引用template包来处理HTML模板,引用regexp包来验证用户的输入,引用闭包操作。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2012-03-20 09:20:40</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=Go%E8%AF%AD%E8%A8%80″ class=”split-left-m usehover”>Go语言</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/406445.html” target=”_blank” class=”usehover article-irl-ct_title”><em>Web</em><em>应用程序</em>开发演变史</a> <!—-> <!—-></div> <a%20href=”https://www./article/406445.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>Arunr把过去15年以来,Web开发从最初的纯HTML到CGI、PHP\JSP\ASP、Ajax、Rails、NodeJS这个过程简要地进行了介绍。Arunr计划把这个作为一个大纲,接下来把每一部分详细地写点东西。如果你想了解Web开发的转变轨迹,推荐看看这篇文章。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2013-08-08 09:48:10</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=Web” class=”split-left-m usehover”>Web</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/187653.html” target=”_blank” class=”usehover article-irl-ct_title”><em>Web</em> 2.0<em>应用程序</em>最佳实践</a> <!—-> <!—-></div> <a%20href=”https://www./article/187653.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>文章以使用LotusConnections2.5为例,揭示了项目团队在开发满足可访问性需求的Web2.0应用程序时获得的一些经验教训和最佳实践,同时也讨论了可访问性验证工具,比如JAWS、WebKing,以及HighContrast模型测试和Web2.0应用程序的HTML代码中的ARIA标记标签的使用。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2010-03-09 13:27:23</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=Web+2.0%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F” class=”split-left-m usehover”>Web 2.0应用程序</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><div class=”article-irl-img usehover”><a%20href=”https://www./article/744399.html” target=”_blank”><img src=”https://s6./oss/202301/09/4750a0589b92c1813bc46837bd37d19c870632.jpg?x-oss-process=image/resize,m_fixed,w_142,h_82″ alt></a></div> <div class=”article-irl-c split-left-l”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/744399.html” target=”_blank” class=”usehover article-irl-ct_title”><em>Web</em> <em>应用程序</em>架构:最新指南</a> <!—-> <!—-></div> <a%20href=”https://www./article/744399.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>在本文中,您将了解Web应用程序架构图的外观以及如何为Web应用程序设计正确的架构。</a></div> <div class=”article-irl-cb”><p class=”article-irl-cb_time”>2023-01-09 17:04:24</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/417870.html” target=”_blank” class=”usehover article-irl-ct_title”>如何基于<em>Web</em><em>应用程序</em>安全经验来开发云<em>应用程序</em>?</a> <!—-> <!—-></div> <a%20href=”https://www./article/417870.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>本文我们将针对如何为云环境开发安全的应用程序以抵御常见攻击提供一些指导,并探讨一些需要落实到位的控制因素,以确保基于云的应用程序在开发和部署时的安全性。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2013-11-19 15:35:01</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/147351.html” target=”_blank” class=”usehover article-irl-ct_title”>使用开源工具测试 <em>Web</em> <em>应用程序</em></a> <!—-> <!—-></div> <a%20href=”https://www./article/147351.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>大部分开发人员(不管他们是否测试自己的代码)至少都了解过关于代码测试的课程。Web开发人员—比大部分开发人员更了解代码测试—需要快速交付应用程序,因此常常会因为交付期限紧迫而忽略单元测试。在某些流程中,忽略对代码进行单元测试是不妥当的,因为单元测试能够测试应用程序的实际组件,并且向其他开发人员解释代码的内部工作。对Web应用程序进行功…</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2009-08-27 11:40:43</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=ibmdw” class=”split-left-m usehover”>ibmdw</a><a target=”_blank” href=”https://so./?keywords=%E4%BA%91%E8%AE%A1%E7%AE%97″ class=”split-left-m usehover”>云计算</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/112127.html” target=”_blank” class=”usehover article-irl-ct_title”>理解<em>Web</em><em>应用程序</em>的安全挑战</a> <!—-> <!—-></div> <a%20href=”https://www./article/112127.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>随着信息技术的告诉发展,企业中的信息系统越来越复杂,就目前的趋势而言,Web应用程序在企业中占据主要地位,因此企业越来越依赖于Web应用程序,目前在安全方面考虑最多的可能是在服务器前部署防火墙,开启SSL协议和主机加固,但遗憾的是攻击的主要目标现在已经逐渐转移到Web应用程序本身了,这些保护措施已经变得越来越没有用了。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2009-02-27 17:00:25</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/205611.html” target=”_blank” class=”usehover article-irl-ct_title”>使用jQuery构建未来<em>Web</em><em>应用程序</em></a> <!—-> <!—-></div> <a%20href=”https://www./article/205611.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>在本篇本章,通过更精彩的功能来进一步扩展您的jQuery知识,并向老的Internet应用程序添加一些真正的“富”特性,使这个演示应用程序成为富Internet应用程序。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2010-06-13 09:22:37</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=jQuery” class=”split-left-m usehover”>jQuery</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/588016.html” target=”_blank” class=”usehover article-irl-ct_title”>Python <em>Web</em><em>应用程序</em>Django框架简介</a> <!—-> <!—-></div> <a%20href=”https://www./article/588016.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>Django是目前Python开发人员使用的主要Web框架,并且原因显而易见。它擅长隐藏大量的配置逻辑,让你专注于能够快速构建大型应用程序。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2018-12-03 08:25:24</p> <!—-></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/330971.html” target=”_blank” class=”usehover article-irl-ct_title”>构建合规的 <em>Web</em> <em>应用程序</em></a> <!—-> <!—-></div> <a%20href=”https://www./article/330971.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>大多数组织中只有大约25%的数据属于敏感数据,这引发一个问题:您是否应该将云应用程序设计为使用全部的可用安全资源来保护所有的数据类型?这种方式十分消耗资源;但您还可以采用另一种方法。在本文中,作者将为企业中的每种数据创建三个分类,当您在设计将使用这些数据的应用程序时,可以利用这些分类判断如何应用安全性。这被称为RegulatoryCompliantCl…</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2012-04-19 09:34:21</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=ibmdw” class=”split-left-m usehover”>ibmdw</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl article-irl_border”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/140152.html” target=”_blank” class=”usehover article-irl-ct_title”>ASP.NET中<em>Web</em><em>应用程序</em></a> <!—-> <!—-></div> <a%20href=”https://www./article/140152.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>本文介绍在ASP.NET中,Web应用程序和会话状态被分别进行维护,通过HttpApplication和HttpSessionState分离Web应用程序与会话的功能。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2009-07-29 10:30:53</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=Web%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F” class=”split-left-m usehover”>Web应用程序</a><a target=”_blank” href=”https://so./?keywords=ASP.NET” class=”split-left-m usehover”>ASP.NET</a></div></div></div></div> <!—-></div><div class=”article-articleitem article-ir articleItem”><div class=”article-irl”><!—-> <div class=”article-irl-c”><div class=”title-box”><div class=”article-irl-ct”><a%20href=”https://www./article/233843.html” target=”_blank” class=”usehover article-irl-ct_title”>微软首次认证开源<em>Web</em><em>应用程序</em></a> <!—-> <!—-></div> <a%20href=”https://www./article/233843.html” target=”_blank” class=”split-top-m usehover pc-three-line article-abstract”>微软宣布了第一款“CertifiedforWindows”的开源Web应用程序。微软认证代表着该程序在Windows上运行毫无问题。</a></div> <div class=”article-irl-cb_fixed”><p class=”article-irl-cb_time”>2010-11-18 09:32:19</p> <div class=”article-irl-cb_sign”><a target=”_blank” href=”https://so./?keywords=%E5%BE%AE%E8%BD%AF” class=”split-left-m usehover”>微软</a><a target=”_blank” href=”https://so./?keywords=%E5%BC%80%E6%BA%90Web%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F” class=”split-left-m usehover”>开源Web应用程序</a></div></div></div></div> <!—-></div></div></section></div> <aside class=”article-right”><!—-><div class=”advert”><div data-src=”https://gg1./www/delivery/ajs.php?zoneid=1171&cb=1705246189&v=article_right_corner” class=”advert-wrap article_right_corner”></div></div><!—-><!—-><!—-><!—-> <div class=”follow-topic”><h3>相似话题</h3> <div class=”follow-topic-list”><div class=”follow-topic-item”><a%20href=”https://www./website” target=”_blank” class=”follow-topic-title”><i class=”ctoicon ctoa-“></i> <div>网站安全</div></a> <a%20href=”https://www./website” target=”_blank” class=”follow-topic-nums”><span>1108内容</span></a></div><div class=”follow-topic-item”><a%20href=”https://www./data” target=”_blank” class=”follow-topic-title”><i class=”ctoicon ctoa-“></i> <div>数据安全</div></a> <a%20href=”https://www./data” target=”_blank” class=”follow-topic-nums”><span>2962内容</span></a></div><div class=”follow-topic-item”><a%20href=”https://www./cloudsecurity” target=”_blank” class=”follow-topic-title”><i class=”ctoicon ctoa-“></i> <div>云安全</div></a> <a%20href=”https://www./cloudsecurity” target=”_blank” class=”follow-topic-nums”><span>1830内容</span></a></div><div class=”follow-topic-item”><a%20href=”https://www./iotsecurity” target=”_blank” class=”follow-topic-title”><i class=”ctoicon ctoa-“></i> <div>物联网安全</div></a> <a%20href=”https://www./iotsecurity” target=”_blank” class=”follow-topic-nums”><span>793内容</span></a></div></div> <a%20href=”https://www./topic” target=”_blank” class=”see-more”><span>全部话题</span> <img src=”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAGKADAAQAAAABAAAAGAAAAADiNXWtAAACT0lEQVRIDZWUPYgTQRTHdzdR0yjRTgOKnViIvVYiooLIieTwQCLkC05UhAPRwlJETpRrjnwiEkSDqETwLARB0FoQwVIRsZOIEDxDEn9vbyZkc5O5zEDy3tv5z++9Nzuzfrlcvul53oUgCK7kcrmX+Nbhqg+gzQ8Gg739fr9ZKpUOW+lrk076APgTWYdNYFr1en3/Gsf876qXDhZ833+jcNu73e5KrVbbZcaHT530QbFY7MZisTMk+aigu3u93kqj0dhmSuKqlw68bDb7h9ZPkuSbxPgHOp3O82azuVni8eGiDxMIgMp+Aj5Okl8S4x9pt9sPsL7E42Na/TCBAFj0BXOKJH8lBn6uUqncEd80ptFHEgikUCh8EDBuX2L8BY7vZfFNYyP9ugQCobIXdHFpBHiPTs6OxBHXpjfur17Nrb1FB9dVvMppO8Ztf6fnx61Jb+xAL6T9G3TyUMVbOL5Les5kTXprAqr3+Q01JLN2bNLHTJXoZ6lU6jb+vIpli+ZarVZ4V7Rm1Jr0w+pGheLzUi9S0TXxKXyAOW/b/0l6Y8u8rBngT4GGBfApv5rP5+9LMtOw6dd1UK1WDwF5xE/P3bXBN9JHOuBC7WM73lP9DqkU/zHwObVF8igyptHrKj3EOwG91nBIb5PJZMYCn0ofJuD7vxXQK+B7VImfsDPpdPpfpGQVuOjjVL6JC/QM+EG1/nsikTiRyWR+m+Cu+jiQReBHBUYXbYzAf0g8YTjp40BnSSCsVY7jac765wng8LGrPmDBMiu/Ap+1XSSd1FX/H7GkjBB3TDEJAAAAAElFTkSuQmCC” alt></a></div> <div class=”hot-article”><h3>同话题下的热门内容</h3> <div class=”hot-article-list”><a%20href=”https://www./article/779210.html” target=”_blank” class=”hot-article-item”>养成密码管理习惯,保障个人数字安全</a><a%20href=”https://www./article/779236.html” target=”_blank” class=”hot-article-item”>2024年网络安全趋势:人工智能、云计算和威胁情报</a><a%20href=”https://www./article/778931.html” target=”_blank” class=”hot-article-item”>深入浅出SSH隧道穿透</a><a%20href=”https://www./article/778970.html” target=”_blank” class=”hot-article-item”>迄今最详细的人工智能网络攻击分类指南</a><a%20href=”https://www./article/779123.html” target=”_blank” class=”hot-article-item”>如何应对深度伪造和合成媒体对网络安全的影响?</a><a%20href=”https://www./article/779068.html” target=”_blank” class=”hot-article-item”>企业如何实现强加密安全防护?</a><a%20href=”https://www./article/778959.html” target=”_blank” class=”hot-article-item”>分析恶意软件时可能遇到的三个常见问题</a><a%20href=”https://www./article/778806.html” target=”_blank” class=”hot-article-item”>2023年企业网络安全预算情况观察与发现</a></div></div> <div class=”hot-article”><h3>编辑推荐</h3> <div class=”hot-article-list”><a%20href=”https://www./article/778045.html” target=”_blank” class=”hot-article-item”>2023年网络攻击事件盘点</a><a%20href=”https://www./article/778078.html” target=”_blank” class=”hot-article-item”>2024年的五大关键网络安全趋势</a><a%20href=”https://www./article/771247.html” target=”_blank” class=”hot-article-item”>欧盟网络安全威胁:虚假与错误信息</a><a%20href=”https://www./article/779210.html” target=”_blank” class=”hot-article-item”>养成密码管理习惯,保障个人数字安全</a><a%20href=”https://www./article/778663.html” target=”_blank” class=”hot-article-item”>2023年加密钓鱼诈骗报告:常见网络钓鱼手法大揭秘</a></div></div> <div class=”relevant-topic”><h3><span>相关专题</span> <a%20href=”https://www./specials” target=”_blank”>更多</a></h3> <a%20href=”https://www./act/juniper/2023″ target=”_blank” class=”first-topic”><div class=”first-topic-cover”><img src=”https://s7./oss/202312/18/66b0d62436766e8f3f73393dd90f4715098679.jpg” alt=”网络运维智能化?瞻博网络有奇招!”></div> <div class=”first-topic-title”>网络运维智能化?瞻博网络有奇招!</div></a> <div class=”relevant-topic-list”><a%20href=”https://server./act/datacenter/20231216″ target=”_blank” class=”relevant-topic-item”><div class=”relevant-topic-cover”><img src=”https://s6./oss/202312/18/027042578ce036b1e02142a2d30c90c75d6c84.jpg” alt=”2023年数据中心热门技术回顾”></div> <div class=”relevant-topic-info”><div class=”relevant-topic-title”>2023年数据中心热门技术回顾</div> <div class=”relevant-topic-time”>2023-12-18 09:33:33</div></div></a><a%20href=”https://cloud./act/nzpxresult/2023″ target=”_blank” class=”relevant-topic-item”><div class=”relevant-topic-cover”><img src=”https://s4./oss/202312/28/f529d3086dfcd0886d4232861fd628895d0c7d.jpg” alt=”2023年第十八届中国企业年终评选榜单公布!”></div> <div class=”relevant-topic-info”><div class=”relevant-topic-title”>2023年第十八届中国企业年终评选榜单公布!</div> <div class=”relevant-topic-time”>2023-12-28 20:12:38</div></div></a></div></div> <div class=”my-follow-btn”>我收藏的内容</div> <div class=”components-topic-edit edit articleStyle”><a%20href=”https://www./editor.html#article”><img src=”https://s5-media./cms/static/img/edit.jpg” alt></a></div> <div id=”postionSet” class=”toppostion”></div></aside> <div class=”left-window”><div class=”window-item zan”><img src=”https://s5-media./cms/client/img/zanpc10.eeddee9.png” alt=”点赞”> <img src=”https://s5-media./cms/client/img/zanhover.6138b44.png” alt class=”unhover”></div> <div class=”window-item collect”><img src=”https://s5-media./cms/client/img/collect.6dfb91c.png” alt=”收藏”> <img src=”https://s5-media./cms/client/img/collecthover.2ffcc8f.png” alt class=”unhover”></div> <div class=”window-item share”><img src=”https://s5-media./cms/client/img/share.ca08f33.png” alt=”分享”> <div class=”share-div” style=”display:none;”><div class=”share-item”><i class=”ctoicon ctoweibo1″></i> <span>微博</span></div> <div class=”share-item”><i class=”ctoicon ctoqq”></i> <span>QQ</span></div> <div class=”share-item wxshare”><i class=”ctoicon ctoweixin1″></i> <span>微信</span></div> <div class=”share-item”><i class=”ctoicon ctoURL”></i> <span>复制链接</span></div> <div class=”wxshare-div”><div id=”qrcodediv”></div> <p>微信扫码分享</p></div></div></div></div> <!—-></div></section> <footer id=”footerSet” class=”components-common-footer footer”><div class=”total-footer”><div class=”top-set”><div class=”left-work”><h3 class=”common-h3″>业务</h3> <ul class=”nav-link”><li><div class=”name-type”>媒体</div> <a%20href=”https://www./” target=”_blank”></a><a%20href=”https://www.cioage.com/” target=”_blank”>CIOAge</a><a%20href=”https://www.hc3i.cn/” target=”_blank”>HC3i</a><a%20href=”https://www./techplur” target=”_blank”>Techplur</a></li><li><div class=”name-type”>社区</div> <a%20href=”https://blog./” target=”_blank”>博客</a><a%20href=”https://edu./rk/” target=”_blank”>软考资讯</a><a%20href=”https://ost./” target=”_blank”>鸿蒙开发者社区</a></li><li><div class=”name-type”>教育</div> <a%20href=”https://edu./” target=”_blank”>学堂</a><a%20href=”https://e./?utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=4″ target=”_blank”>精培</a><a%20href=”https://b./index?utm_source=hometop” target=”_blank”>企业培训</a><a%20href=”https://x./act/cto/camp” target=”_blank”>CTO训练营</a></li></ul> <div><ul class=”tr_task” style=”display:none;”><li><img src=”https://static1./www/images/ewm_8.jpg” alt> <span>学堂</span></li> <li><img src=”https://static1./www/images/ewm_qy.png” alt> <span>学堂企业版</span></li> <i class=”kuai”></i></ul> <ul class=”tr_task_weixin” style=”display:none;”><li><img src=”https://static1./www/images/ewm_3.jpeg” alt> <span>官微</span></li> <li><img src=”https://static1./www/images/ewm_4.jpeg” alt> <span></span></li> <i class=”kuai”></i></ul> <div class=”tr_foot”><i class=”ctoicon ctoweixin”></i> <a%20href=”https://weibo.com/51cto001?is_all=1″ target=”_blank” rel=”noopener noreferrer”><i class=”ctoicon ctoweibo”></i></a> <span><i class=”ctoicon ctoapp”></i></span></div></div></div> <div class=”middle”><h3 class=”common-h3″>关于我们&条款</h3> <div class=”about”><div><ul class=”detail-link”><li><a%20href=”https://www./about/about_home.html” target=”_blank”>关于我们</a></li> <li><a%20href=”https://www./about/map.html” target=”_blank”>站点地图</a></li> <li><a%20href=”https://www./about/history2020.html” target=”_blank”>网站大事</a></li> <li><a%20href=”https://www./about/aboutus.html#feedback” target=”_blank”>意见反馈</a></li> <li><a%20href=”https://www./about/aboutus_e.html” target=”_blank”>English</a></li> <li><a%20href=”https://edu./center/other/service” target=”_blank”>用户协议</a></li> <li><a%20href=”https://edu./center/other” target=”_blank”>隐私协议</a></li></ul></div> <div class=”address”><p> 北京市海淀区中关村南1条甲1号ECO中科爱克大厦6-7层 </p> <p> 北京市公安局海淀分局备案编号:110108002980号 <br>营业执照 <a%20href=”https://beian.miit.gov.cn/” target=”_blank” class=”record-number”>京ICP备09067568号</a></p> <p> Copyright © 2005-2024 .COM 京ICP证060544 版权所有 未经许可 请勿转载 </p> <div class=”address_img”><a%20href=”https://image./images/51cto-icp.jpg” target=”_blank”><img src=”https://s7./wyfs02/M02/73/FD/wKiom1YLhe6Rz4cRAAAXp7l7roQ463.jpg” alt></a></div></div></div></div> <div class=”right-link”><h3 class=”common-h3″>友情链接</h3> <div class=”links clearfix”><a%20href=”https://tech.sina.com.cn/” target=”_blank”>新浪科技</a><a%20href=”https://tech.qq.com/” target=”_blank”>腾讯科技</a><a%20href=”https://tech.163.com/” target=”_blank”>网易科技</a><a%20href=”https://tech.ifeng.com/” target=”_blank”>凤凰科技</a><a%20href=”https://www.mydrivers.com/” target=”_blank”>驱动科技</a><a%20href=”https://www.techwalker.com/” target=”_blank”>科技行者</a><a%20href=”http://www.techweb.com.cn/” target=”_blank”>TechWeb</a><a%20href=”https://www.iresearch.cn/” target=”_blank”>艾瑞网</a><a%20href=”http://www.chinaz.com/” target=”_blank”>站长之家</a><a%20href=”https://www.sootoo.com/” target=”_blank”>速途网</a><a%20href=”http://www.cet.com.cn/” target=”_blank”>中国经济新闻网</a><a%20href=”https://www.ithome.com/” target=”_blank”>IT之家</a><a%20href=”http://www.iitime.com.cn/” target=”_blank”>工联网</a><a%20href=”https://www.geekpark.net/” target=”_blank”>极客公园</a><a%20href=”https://www.263.net/” target=”_blank”>236视频会议</a><a%20href=”http://www.idcquan.com/” target=”_blank”>中国IDC圈</a><a%20href=”http://www.d1net.com/” target=”_blank”>企业网D1Net</a><a%20href=”https://www.pedaily.cn/” target=”_blank”>投资界</a><a%20href=”https://metafun-space.com/” target=”_blank”>次方元</a><a%20href=”https://www.volcengine.com/” target=”_blank”>火山引擎</a></div></div></div></div></footer> <section class=”suspension-pendant_r”><div class=”erweima-title” style=”display:none;”><img src=”https://s5-media./cms/static/img/erweima.png” alt=””> <p>技术栈公众号</p></div> <div class=”erweima-box”><p>技术栈公众号</p> <img src=”https://s5-media./cms/static/img/video.jpg” alt=””></div></section> <div class=”components-common-suspension po_top”><div class=”cbbfixed”><span class=”business”> 业务 <br>速览 </span> <span class=”line”></span> <div class=”customer_service js_customer zhiCustomBtn” style=”height: 36px;”><i class=”ctoicon ctokefu”></i> <div class=”tooltip_set js_tooltip”>在线客服</div></div> <span class=”line”></span> <i class=”ctoicon ctoxiangshang”></i></div> <div class=”cbb_con”><div><div class=”title-li”>媒体</div> <a%20href=”https://www./” target=”_blank”></a> <a%20href=”https://www.cioage.com/” target=”_blank”>CIOAge</a> <a%20href=”https://www.hc3i.cn/” target=”_blank”>HC3i</a></div> <div><div class=”title-li”>社区</div> <a%20href=”https://blog./” target=”_blank”>博客</a> <a%20href=”https://ost./” target=”_blank”>鸿蒙开发者社区</a></div> <div><div class=”title-li”>教育</div> <a%20href=”https://edu./” target=”_blank”>学堂</a> <a%20href=”https://e./?utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=4″ target=”_blank”>精培</a> <a%20href=”https://b./index?utm_source=hometop” target=”_blank”>企业培训</a> <a%20href=”https://x./act/cto/camp” target=”_blank”>CTO训练营</a></div></div></div> <!—-> <!—-></div></div></div><script>window.__CTOWEB__=(function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw){return {layout:”default”,data:[{baseInfo:{article_id:200973,title:”Web应用程序攻防实战”,author:”黄永兵 编译”,author_user_id:c,pubdate:”2010-05-20 09:48:36″,abstract:”想亲自击败黑客吗?OK,没问题,首先你要了解黑客是如何查找安全漏洞的,其次就是要了解黑客是如何利用Web应用程序漏洞的,最后就是了解他们是如何组织进攻的。本文将以一个漏洞百出的程序Jarlsberg为例,为大家讲解Web应用程序的攻防手段,全面解剖黑客的行径和应对办法。”,editor:”许凤丽”,source:”.com”,source_url:a,article_type:{name:n,url:o},topics:[{parent_topic_id:c,topic_id:f,name:p,name_en:”netsecurity”,url:D},{name_en:”application”,name:E,topic_id:h,parent_topic_id:f,url:”https:\u002F\u002Fwww.\u002Fapplication”}],keywords:[{name:”黑客”,url:”https:\u002F\u002Fso.\u002F?keywords=%E9%BB%91%E5%AE%A2″},{name:”Web安全”,url:”https:\u002F\u002Fso.\u002F?keywords=Web%E5%AE%89%E5%85%A8″}],content:” \u003Cp\u003E【.com独家翻译】想亲自击败黑客吗?OK,没问题,首先你要了解黑客是如何查找安全漏洞的,其次就是要了解黑客是如何利用Web应用程序漏洞的,最后就是了解他们是如何组织进攻的。本文将以一个漏洞百出的程序Jarlsberg为例,为大家讲解Web应用程序的攻防手段,全面解剖黑客的行径和应对办法。Jarlsberg是用Python编写的,因此略懂Python会帮助理解本文,但即使不懂也无所谓,因为漏洞和修复漏洞的方法基本上是与语言无关的。另外我们会涉及到黑盒黑客和白盒黑客,所谓黑盒黑客就是通过操纵输入字段或URL参数,观察Web应用程序的响应和变化,尝试找出让它出错的一种攻击手段,这里我们通常会查看HTTP\u002FHTTPS请求和响应,推荐两款很棒的辅助工具Burp和WebScarab;所谓白盒黑客就是分析Web应用程序源代码,尝试找出bug并进行攻击的手段。\u003C\u002Fp\u003E\r\n\u003Cp\u003E你完全可以根据本文介绍的内容搭建一个渗透测试环境,自己做做练习,以提升自己的技能,当然最重要的是通过学习达到举一反三,以后自己也能发现和修复漏洞,Jarlsberg的下载地址是\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002Fjarlsberg-code.zip\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002Fjarlsberg-code.zip\u003C\u002Fa\u003E,你也可以直接访问\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002Fstart\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002Fstart\u003C\u002Fa\u003E,AppEngine会自动为你创建一个新的Jarlsberg实例,每个实例都运行在独立的沙盒中,用唯一的ID进行标识,你可以随意展开攻击,你也可以将你唯一的URL分享给其它人进行攻击研究。\u003C\u002Fp\u003E\r\n\u003Cp\u003E如果想在本地运行Jarlsberg,需要先安装Python 2.5,其它版本可能不行,执行Jarlsberg安装的命令如下:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E$ cd \u003Cjarlsberg解压后的路径\u003E\u003C\u002Fp\u003E\u003Cp\u003E$ .\u002Fjarlsberg.py\u003Cbr \u002F\u003E \u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E用localhost:8008替换所有文件中的jarlsberg.appspot.com,并用分配给你的唯一ID替换默认ID 123。\u003C\u002Fp\u003E\r\n\u003Cp\u003E如果是直接在AppEngine上创建的Jarlsberg实例,它有诸多限制,如不能访问和干扰其它Jarlsberg实例,资源使用也是有限制的,如果你捣鼓得Jarlsberg实例无法运行时,可以通过下面的URL进行重置,不过要注意的是所有历史数据都将被清除掉。\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002Fresetbutton\u002F123\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002Fresetbutton\u002F123\u003C\u002Fa\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E注意用你自己的ID替换这里的123。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003EJarlsberg各个源文件介绍:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆jarlsberg.py是Jarlsberg Web服务器\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆jdata.py在数据库中存储默认数据,有一个管理员账号和两个默认用户\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆jtl.py是Jarlsberg模板语言\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆jsanitize.py是Jarlsberg保护自身HTML免受攻击的模块\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆resources\u002F…目录下存放了所有模板,图片和CSS等文件\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E跨站脚本(XSS)\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E跨站脚本(XSS)指的是黑客通过网站漏洞在不受自己控制的网站内容(通常是HTML或JavaScript)中植入代码,当受害者浏览这样的网页时,植入的代码就会在受害者浏览器中执行,这样就可以顺理成章地窃取受害者与网站请求相关的个人信息。\u003C\u002Fp\u003E\r\n\u003Cp\u003E在一个反射式XSS攻击中,攻击通常是嵌入在请求URL中,受害者浏览黑客构造的恶意URL时就被攻击了。在存储式XSS攻击中,攻击者将攻击代码保存在应用程序内,受害者浏览到这样的网页时就触发攻击代码的执行。\u003C\u002Fp\u003E\r\n\u003Cp\u003E假设\u003Ca%20href=\”http:\u002F\u002Fwww.google.com\u002Fsearch?q=flowers\”\u003Ehttp:\u002F\u002Fwww.google.com\u002Fsearch?q=flowers\u003C\u002Fa\u003E这个URL返回的页面包含以下HTML片段:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E\u003Cp\u003EYour search for ‘flowers’\u003C\u002Fp\u003E\u003Cp\u003Ereturned the following results:\u003C\u002Fp\u003E\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E查询参数q的值被嵌入到Google返回的页面中,如果\u003Ca%20href=\”http:\u002F\u002Fwww.google.com\”\u003Ewww.google.com\u003C\u002Fa\u003E不做任何验证或忽略q,攻击者就可以构造一个类似下面这样的链接进行攻击尝试:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n\r\nhttp:\u002F\u002Fwww.google.com\u002Fsearch?q=flowers+%3Cscript%3Eevil_script()%3C\u002Fscript%3E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E接下来就是欺骗受害者点击这个链接,当受害者点击这个链接后,他的浏览器就会解析下面的代码:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E\u003Cp\u003EYour search for ‘flowers\u003Cscript\u003Eevil_script()\u003C\u002Fscript\u003E’\u003C\u002Fp\u003E\u003Cp\u003Ereturned the following results:\u003C\u002Fp\u003E\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E浏览器就会执行evil_script(),于是受害者的浏览器状态和所有该域名对应的cookies都全部暴露出来了。\u003C\u002Fp\u003E\r\n\u003Cp\u003E有时即使受害者不直接地点击恶意链接也会遭受攻击,例如,假设攻击者拥有\u003Ca%20href=\”http:\u002F\u002Fwww.evil.example.com\”\u003Ewww.evil.example.com\u003C\u002Fa\u003E域名,在页面中用\u003Ciframe\u003E包含一个恶意链接,这是受害者只要访问\u003Ca%20href=\”http:\u002F\u002Fwww.evil.example.com\”\u003Ewww.evil.example.com\u003C\u002Fa\u003E,就会被暗中攻击。#p#\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003EXSS挑战\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E一般说来,当其他用户浏览一个网页时,你可以让一段JavaScript代码在这个网页上执行,就说明它有XSS漏洞,一个简单有效的JavaScript函数是alert(),它会弹出一个窗口。\u003C\u002Fp\u003E\r\n\u003Cp\u003E你可能认为插入一个alert消息不会有任何危险,但如果你能够插入alert(1),那么插入其它恶意代码,如eval(String.fromCharCode(…))也就没有问题了。\u003C\u002Fp\u003E\r\n\u003Cp\u003E我们的挑战是发现Jarlsberg中的XSS漏洞,在哪些地方去找这个漏洞呢?一个是URL,另一个是存储的数据。因为XSS漏洞通常包含在那些不能正确处理非受信用户数据的应用程序中,发现XSS漏洞的方法通常是在输入字段中输入任意文字,再看响应的HTML代码变化。我们先来做一个简单的尝试。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E文件上传XSS\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:你能上传一个文件,让你在jarlsberg.appspot.com域名上执行任意脚本吗?\u003C\u002Fp\u003E\r\n\u003Cp\u003E暗示:你可以上传一个包含脚本的HTML文件。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击:上传一个.html文件,包含以下脚本\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E\u003Cscript\u003E\u003C\u002Fp\u003E\u003Cp\u003Ealert(document.cookie);\u003C\u002Fp\u003E\u003Cp\u003E\u003C\u002Fscript\u003E\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E修复:在一个独立的域名上托管内容,这样脚本就不能访问你域名上的任何内容了,也就是说,我们应该用username.usercontent.example.com或username.example-usercontent.com这样的域名代替example.com\u002Fusername托管用户的内容,另外还要注意不要让用户可以注册注入wwww等容易引起钓鱼攻击的用户名。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E反射式XSS\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E有趣的是,有些浏览器内置了防反射式XSS攻击,如IE和Chrome,另外也有一些浏览器扩展,如NoScript也能提供这样的保护,为了解决这个问题,Jarlsberg特意在每个HTTP响应头中加入了X-XSS-Protection: 0,让IE可以识别,如果是Chrome,你可以通过disable-xss-auditor启动参数禁用反射式XSS保护。\u003C\u002Fp\u003E\r\n\u003Cp\u003E如果你使用的是Firefox,并安装了NoScript扩展,请将jarlsberg.appspot.com列入允许列表,如果还不行,最好换个其它浏览器。\u003C\u002Fp\u003E\r\n\u003Cp\u003E也许你认为既然浏览器有了保护能力,为什么还需要担心这种攻击呢?其实浏览器并不能完全准确地实施保护,因为它不了解你的应用程序,聪明的黑客是可以绕过这层保护机制的,真正的保护是从应用程序源头杜绝XSS漏洞。\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:找出一个反射式漏洞,我们希望通过点击一个URL执行一个脚本。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示1:这个URL是什么呢?\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Finvalid\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Finvalid\u003C\u002Fa\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E提示2:在URL中最危险的字符是\u003C和\u003E,尝试输入下面的URL:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%3e%3c\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%3e%3c\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%253e%253c\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%253e%253c\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%c0%be%c0%bc\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%c0%be%c0%bc\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%26gt;%26lt\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%26gt;%26lt\u003C\u002Fa\u003E;\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%26amp;gt;%26amp;lt\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F%26amp;gt;%26amp;lt\u003C\u002Fa\u003E;\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F\\074\\x3c\\u003c\\x3C\\u003C\\X3C\\U003C\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F\\074\\x3c\\u003c\\x3C\\u003C\\X3C\\U003C\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F+ADw-+AD4\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F+ADw-+AD4\u003C\u002Fa\u003E-\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E以上的URL是通过不同语言风格构造的\u003C和\u003E,直接在浏览器地址栏输入\u003C和\u003E是一样的,浏览器会自动编码,然后查看返回的HTML代码,研究服务器对这些URL的响应。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击:创建下面这样一个URL,让受害者点击它\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F\u003Cscript\u003Ealert(1)\u003C\u002Fscript\”\u003E\r\nhttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F\u003Cscript\u003Ealert(1)\u003C\u002Fscript\u003C\u002Fa\u003E\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E修复:你需要绕过显示在错误信息中的用户输入,错误信息是使用error.jtl显示的,但没有绕过模板,提供消息的模板部分是{{message}},添加:text绕过用户输入。\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n\u003Cdiv class=\”message\”\u003E{{_message:text}}\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E杜绝这个漏洞的最好办法是避免所有默认的输出,仅显示原始HTML。#p#\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E存储式XSS\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:现在我们来寻找一个存储式XSS,我们想做的是在Jarlsberg内部放置一小段代码,其它人访问时就执行它。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示1:放置下面这段代码看看效果\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n\u003Cscript\u003Ealert(1)\u003C\u002Fscript\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E将脚本嵌入到文档有很多方式。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示2:黑客不会限制他们自己验证HTML语法,试试一些无效的网页,看看会返回什么,你可能需要试验一下,以便找到下手的地方。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击:嵌入下面任意一种代码片段\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E(1) \u003Ca onmouseover=\”alert(1)\” href=\”#\”\u003Eread this!\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E(2) \u003Cp \u003Cscript\u003Ealert(1)\u003C\u002Fscript\u003Ehello\u003C\u002Fp\u003E\u003Cp\u003E(3) \u003C\u002Ftd \u003Cscript\u003Ealert(1)\u003C\u002Fscript\u003Ehello\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E修复:在jsanitize.py文件_SanitizeTag部分中,将onmouseover添加到disallowed_attributes列表中,可以预防片段1的攻击。\u003C\u002Fp\u003E\r\n\u003Cp\u003E但这种修复方法不彻底,因为检查不允许的属性时是区分大小写的,而HTML则不区分大小写,正确的做法是:\u003C\u002Fp\u003E\r\n\u003Cp\u003E1、将输入解析为一个中间DOM结构,然后以良好的格式输出;\u003C\u002Fp\u003E\r\n\u003Cp\u003E2、为允许的标记和属性使用严谨的白名单;\u003C\u002Fp\u003E\r\n\u003Cp\u003E3、对允许的URL和CSS属性采用严格的净化处理。\u003C\u002Fp\u003E\r\n\u003Cp\u003E在条件允许的情况下,最好使用一个HTML净化器。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E通过HTML属性进行存储式XSS\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:你也可以在HTML属性上注入值来实施XSS,如通过设置配置文件中的颜色值植入一段脚本。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示1:颜色是使用style=’color:color’渲染的,试试在颜色名中包含一个单引号字符的效果。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示2:你可以插入一个HTML属性执行一个脚本。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击:使用的下面的代码设置颜色\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\nred’ onload=’alert(1)’ onmouseover=’alert(2)\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E当你鼠标移到它上面时就触发了攻击。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复:我们需要一个正确的文字转义程序,有效地规避单引号和双引号,将下面的函数增加到jtl.py,用它替代cgi.escape。\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cp\u003Edef _EscapeTextToHtml(var):  \u003C\u002Fp\u003E\r\n \u003Cp\u003E\”\”\”Escape HTML metacharacters.\u003C\u002Fp\u003E\r\n \u003Cp\u003EThis function escapes characters that are\u003C\u002Fp\u003E\r\n \u003Cp\u003Edangerous to insert into\u003C\u002Fp\u003E\r\n \u003Cp\u003EHTML. It prevents XSS via quotes or script\u003C\u002Fp\u003E\r\n \u003Cp\u003Einjected in attribute values.\u003C\u002Fp\u003E\r\n \u003Cp\u003EIt is safer than cgi.escape, which escapes only\u003C\u002Fp\u003E\r\n \u003Cp\u003E\u003C, \u003E, & by default.   cgi.escape can be told to\u003C\u002Fp\u003E\r\n \u003Cp\u003Eescape double quotes, but it will never \u003C\u002Fp\u003E\r\n \u003Cp\u003Eescape single quotes.   \”\”\”\u003C\u002Fp\u003E\r\n \u003Cp\u003Emeta_chars = {       ‘\”‘: ‘"’,       ‘\\”:\u003C\u002Fp\u003E\r\n \u003Cp\u003E’'’,  # Not '       ‘&’: ‘&’,      \u003C\u002Fp\u003E\r\n \u003Cp\u003E’\u003C’: ‘<’,\u003C       ‘\u003E’: ‘>’,       }  \u003C\u002Fp\u003E\r\n \u003Cp\u003Eescaped_var = \”\”   for i in var:     if i in\u003C\u002Fp\u003E\r\n \u003Cp\u003Emeta_chars:       escaped_var = escaped_var +\u003C\u002Fp\u003E\r\n \u003Cp\u003Emeta_chars[i]     else:       escaped_var =\u003C\u002Fp\u003E\r\n \u003Cp\u003Eescaped_var + i   return escaped_var\u003C\u002Fp\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E但这种修复方法仍然不完美,颜色值仍然存在漏洞。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示1:有些浏览器允许你在样式表中包含脚本。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示2:最容易遭到利用的浏览器是IE,因为它支持动态CSS属性(也叫做CSS表达式)。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:使用下面的代码替换颜色值\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\nexpression(alert(1))\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E虽然其它浏览器不支持动态CSS属性,但一样存在其它危险的CSS属性,如Mozilla的-moz-binding。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:我们需要将颜色值净化为一个真正的颜色值,最好的办法是增加一个新的输出净化格式给jtl,例如,我们可能会书写{{foo:color}}确保foo被安全地用作一个颜色,下面这个函数可以用来净化。\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003ESAFE_COLOR_RE = re.compile(r\”^#?[a-zA-Z0-9]*$\”)\u003C\u002Fp\u003E\u003Cp\u003Edef _SanitizeColor(color):  \u003Cbr \u002F\u003E \u003C\u002Fp\u003E\u003Cp\u003E\”\”\”Sanitizes a color, returning ‘invalid’ if it’s invalid.\u003C\u002Fp\u003E\u003Cp\u003EA valid value is either the name of a color or # followed by the\u003C\u002Fp\u003E\u003Cp\u003Eh code for a color (like #FEFFFF). Returning an invalid value\u003Cbr \u002F\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003Evalue allows a style sheet to specify a default value by writing  ‘color:default; color:{{foo:color}}’.  \”\”\”\u003C\u002Fp\u003E\u003Cp\u003Eif SAFE_COLOR_RE.match(color):   \u003C\u002Fp\u003E\u003Cp\u003Ereturn color\u003Cbr \u002F\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003Ereturn ‘invalid’\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E你可以为字体大小,字体,URL等做类似的净化,它对输入验证也很有帮助,如果有人输入了一个无效值,你可以立即提醒或是拒绝他,但光做输入验证还不够,如果你的验证代码本身也有漏洞,或是浏览器暴出新的攻击向量,你不得不返回重新清洗之前全部输入的值,或是增加输出验证。#p#\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E通过Ajax进行存储式XSS\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:使用Jarlsberg Ajax代码中的bug找出一个XSS攻击点,当你点击页面刷新链接时触发攻击。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示1:在\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl\u003C\u002Fa\u003E上运行curl查看结果,或者在浏览器中输入这个URL,查看返回结果的HTML源代码,你会看到每个用户的第一个微博包含在响应包中,然后整个响应包在客户端接受评估,最后将微博内容插入到文档中,你能够在微博内容中加入点什么使其与预期的结果有所不同吗?\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示2:在你的微博内容中添加一个双引号试试。\u003C\u002Fp\u003E\r\n\u003Cp\u003E利用方法:将下面的代码插入到你的微博内容中。\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003Eall \u003Cspan style=display:none\u003E\”\u003C\u002Fp\u003E\u003Cp\u003E+ (alert(1),\”\”)\u003C\u002Fp\u003E\u003Cp\u003E+ \”\u003C\u002Fspan\u003Eyour base\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003EJSON看起来应该象\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n_feed(({…, \”Mallory\”: \”snippet\”, …}))\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E代替后看起来象\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E_feed({…, \”Mallory\”: \”all \u003Cspan style=display:none\u003E\”\u003C\u002Fp\u003E\u003Cp\u003E+ (alert(1),\”\”)\u003C\u002Fp\u003E\u003Cp\u003E+ \”\u003C\u002Fspan\u003Eyour base\”, …})\u003Cbr \u002F\u003E \u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E注意,每个下划线部分都是一个独立的表达式,这个攻击是不可见的,因为使用了\u003Cspan style=display:none\u003E,即使刷新后也是不可见的,因为它只插入了一个空字符串,存在这种可利用的漏洞表明服务器端和客户端都有bug。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:首先,在服务器端,原文在JSON响应中呈现时转义就不正确,虽然模板声明了{{snippet.0:html}},但仍然不够,原文将被插入到DOM节点的内部HTML中,因此HTML必须进行净化,但净化后的原文将被插入到JavaScript中,单引号和双引号将被转义,给jtl增加{{…:js}}支持是不够的,我们也需要支持{{…:html:js}}。\u003C\u002Fp\u003E\r\n\u003Cp\u003E如果要转义单引号和双引号,分别使用\\x27和\\x22,用和"替代它们是不正确的,因为JavaScript是不能识别和"的。\u003C\u002Fp\u003E\r\n\u003Cp\u003E其次,在浏览器中,Jarlsberg使用JavaScript的eval转换JSON,通常情况下,使用eval非常危险,我们应该使用JSON解析器确保字符串不包括任何不安全的内容,json.org就提供了JSON解析器下载。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E通过Ajax实施反射式XSS\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:使用Jarlsberg的Ajax功能,找出一个URL,点击它就执行一个脚本。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示1:Jarlsberg刷新用户的微博页面时,使用了:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl?uid=value\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl?uid=value\u003C\u002Fa\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E结果是脚本\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n_feed(([\”user\”, \”snippet1\”, … ]))\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E提示2:这里使用了不同的漏洞,但和前面的反射式XSS利用方法是类似的。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:创建类似下面这样的URL,诱使受害者点击它\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl?uid=\u003Cscript\u003Ealert(1)\u003C\u002Fscript\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl?uid=\u003Cscript\u003Ealert(1)\u003C\u002Fscript\u003C\u002Fa\u003E\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl?uid=%3Cscript%3Ealert(1)%3C\u002Fscript%3E\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl?uid=%3Cscript%3Ealert(1)%3C\u002Fscript%3E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E它们被翻译为\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n_feed(([\”\u003Cscript\u003Ealert(1)\u003C\u002Fscript\u003E\”]))\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E这个bug让Jarlsberg返回了所有文件类型为text\u002Fhtml的jtl文件。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:需要确保JSON内容不会当作HTML解析,需要修改{{…:js}},用JavaScript转移字符\\x3c和\\x3e进行替换,在JavaScript中用\\x3c和\\x3e分别替换\u003C和\u003E总是安全的,注意,用HTML转移字符<和>也是不正确的。\u003C\u002Fp\u003E\r\n\u003Cp\u003E同时,你还应该设置响应的内容类型,这里我们使用application\u002Fjavascript。\u003C\u002Fp\u003E\r\n\u003Cp\u003E此外,Jarlsberg也未设置内容编码,浏览器会尝试根据文档内容进行猜测,攻击者也可以利用这个漏洞欺骗浏览器,如攻击者使用UTF-7编码欺骗浏览器,于是就可以嵌入+ADw-script+AD4-脚本标记,在UTF-7中,+ADw-和+AD4-分别代表\u003C和\u003E,因此不仅要设置正确的内容类型,编码也要设置,设置方法和HTML类似,如:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\nContent-Type: text\u002Fhtml; charset=utf-8\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E虽然没有一种万能的方法来防御XSS漏洞,但仍然有一些重要的原则应该遵守。\u003C\u002Fp\u003E\r\n\u003Cp\u003E1、首先确保你弄明白了问题;\u003C\u002Fp\u003E\r\n\u003Cp\u003E2、尽可能通过模板功能净化,尽量不要直接在代码中使用转义字符进行净化;\u003C\u002Fp\u003E\r\n\u003Cp\u003E3、实施XSS相关的测试;\u003C\u002Fp\u003E\r\n\u003Cp\u003E4、不要试图自己写模板库。 #p#\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E客户端状态操纵\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E用户与Web应用程序交互是通过浏览器进行的,点击一个按钮或是提交一个表单,浏览器都会将请求发送给Web服务器,因为浏览器很容易被黑客控制,因此Web服务器不应该相信任何浏览器发来的数据。\u003C\u002Fp\u003E\r\n\u003Cp\u003E写一个Web应用程序也不相信任何数据似乎不太可能,也没那个必要,如用户提交一个表单表示他想购买的商品列表,这时信任它也无妨,但如果提交的表单也包含价格信息,那就应该谨慎了。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E特权提升\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:将你的帐户升级成管理员\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示:一般用户和管理员都使用editprofile.jtl编辑自己的配置信息,如果你不是管理员,这个页面看起来会有所不同。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:使用下面任意一个URL都可以将你的普通帐户转换成管理员\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fsaveprofile?action=update&is_admin=True\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fsaveprofile?action=update&is_admin=True\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fsaveprofile?action=update&is_admin=True&uid=username\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fsaveprofile?action=update&is_admin=True&uid=username\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E第二个URL可以通过替换username将任何一个普通用户升级成管理员。\u003C\u002Fp\u003E\r\n\u003Cp\u003E由于Cookie的问题,你可能看到帐户状态不是立即显示为管理员,只要你注销重新登录就可以了。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:这里的bug是服务器端代码缺少身份验证引起的,正确的做法是在服务器端检查授权。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003ECookie操纵\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E因为HTTP协议是无状态的,Web无法知道某两个请求来自同一个用户,就是在这种背景下,Cookie诞生了,当一个网站在HTTP响应中引入Cookie后,浏览器在下一次请求时就会自动发送Cookie,网站可以使用Cookie保存会话状态,Jarlsberg使用Cookie记住登录用户的身份,因为Cookie是保存在客户端的,因此很容易受到操纵,Jarlsberg为了保护Cookie专门增加了一个散列,遗憾的是,实施攻击不一定需要破坏散列。\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:让Jarlsberg为你生成其它用户的Cookie。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示:Jarlsberg的Cookie格式如下\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\nhash|username|admin|author\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E当你登录时Jarlsberg为你生成一个Cookie。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:使用“foo|admin|author”作为用户名创建一个新用户,然后用它登录,Jarlsberg产生“hash|foo|admin|author||author”Cookie,于是foo成为管理员,因此这也算是一种特权提升攻击。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:由于系统对用户名没有任何字符限制才导致攻击可以得逞,因此在构造Cookie时要对用户名进行转义,如果与预期的模式不能匹配,就拒绝为其产生Cookie。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E跨站请求伪造(XSRF)\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E前面我们曾提到,如果用户提交的表单仅仅表示他希望购买的商铺列表,那信任这些数据也无妨,只要确保是这个用户提交的数据即可,如果你的网站有XSS漏洞,即使你已经实施了XSS保护,但还有另一种攻击需要保护,那就是跨站请求伪造。\u003C\u002Fp\u003E\r\n\u003Cp\u003E浏览器向网站发送请求时,它也会将该网站的Cookie一并发送,Web服务器不会区分请求是否有用户行为(如用户点击提交按钮,或是页面中嵌入的一个图片),因此,当网站接收到一个请求要执行一些动作时(如删除邮件,修改联系人信息等),Web服务器不知道这些行为是否是用户真正的本意,即使请求中包含了Cookie也证明不了,攻击者可以利用这个漏洞欺骗服务器,执行非用户本意想要执行的动作。\u003C\u002Fp\u003E\r\n\u003Cp\u003E例如,假设Blogger有XSRF漏洞,在页面上有一个删除按钮,其对于的URL是:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Ca%20href=\”http:\u002F\u002Fwww.blogger.com\u002Fdeleteblog.do?blogId=BLOGID\”\u003Ehttp:\u002F\u002Fwww.blogger.com\u002Fdeleteblog.do?blogId=BLOGID\u003C\u002Fa\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E攻击者Bob在他自己的网页\u003Ca%20href=\”http:\u002F\u002Fwww.evil.example.com\”\u003Ehttp:\u002F\u002Fwww.evil.example.com\u003C\u002Fa\u003E中嵌入下面的HTML代码:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n\u003Cimg src=\”\u003Ca%20href=\”http:\u002F\u002Fwww.blogger.com\u002Fdeleteblog.do?blogId=alice’s-blog-id\”\u003Ehttp:\u002F\u002Fwww.blogger.com\u002Fdeleteblog.do?blogId=alice’s-blog-id\u003C\u002Fa\u003E\”\u003Cbr \u002F\u003E    \u003Cbr \u002F\u003Estyle=\”display:none\”\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E如果受害者Alice登录到\u003Ca%20href=\”http:\u002F\u002Fwww.blogger.com\”\u003Ewww.blogger.com\u003C\u002Fa\u003E,当她浏览上面的页面时,会发生:\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆她的浏览器从\u003Ca%20href=\”http:\u002F\u002Fwww.evil.example.com\”\u003Ehttp:\u002F\u002Fwww.evil.example.com\u003C\u002Fa\u003E载入页面,之后浏览器尝试载入页面中嵌入的所有对象,包括这里的img对象;\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆浏览器向\u003Ca%20href=\”http:\u002F\u002Fwww.blogger.com\u002Fdeleteblog.do?blogId=alice’s-blog-id\”\u003Ehttp:\u002F\u002Fwww.blogger.com\u002Fdeleteblog.do?blogId=alice’s-blog-id\u003C\u002Fa\u003E产生一个请求,载入图片,由于Alice已经登录到Blogger,她就有一个Blogger Cookie,浏览器也会在请求中发送该Cookie;\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆Blogger验证Cookie是一个有效的会话Cookie,然后验证alice’s-blog-id对应的博客是否属于Alice,如果是就删除该博客;\u003C\u002Fp\u003E\r\n\u003Cp\u003E◆Alice不知道是什么原因造成自己的博客就没有了。\u003C\u002Fp\u003E\r\n\u003Cp\u003E在这个攻击示例中,因为每个用户有他们自己的博客id,攻击目标是单个用户,但在很多时候,类似这样的攻击可以针对批量用户,批量数据。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003EXSRF挑战\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E这里的目标是找到一个方法代表登录Jarlsberg的用户执行账号修改行为,但真正的用户并不知情,假设你可以正常访问一个网页。\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:找到一个方法让某个人删除他们的Jarlsberg微博内容。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示:删除一个微博内容用到的URL是什么?\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:诱使用户访问产生下列请求的页面\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fdeletesnippet?index=0\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fdeletesnippet?index=0\u003C\u002Fa\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E为了达到更好的迷惑性,我们将Jarlsberg图标加在这个URL上。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:我们首先应该修改\u002Fdeletesnippet通过POST请求工作,因为这是一个状态改变行为,按照HTML形式,将method=’get’修改为method=’post’。在服务器端,GET和POST请求除了调用不同的处理程序外,它们都一样,例如,Jarlsberg使用Python的BaseHTTPServer为GET请求调用do_GET,为POST请求调用do_POST。\u003C\u002Fp\u003E\r\n\u003Cp\u003E但仅仅修改为POST并是完美的修复方法,只能说使用POST是正确的做法,因为GET请求是可以重新发出的,而POST请求是不能重新发出的,我们需要传递一个唯一的,不可预知的认证令牌action_token给用户,可以使用用户Cookie和当前时间戳的哈希值,在所有改变状态的HTTP请求中作为一个附加HTTP参数包含这个令牌,使用时间戳的目的是可以让过期的令牌失效,即使它被泄露出去,因时效性问题,引起的影响也会很小。\u003C\u002Fp\u003E\r\n\u003Cp\u003E在处理一个请求时,Jarlsberg应该重新生成令牌,与请求提供的令牌进行比较,如果相同就执行行为,否则就拒绝它,生成和验证令牌的函数如下:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003Edef _GenerateXsrfToken(self, cookie):  \”\”\”Generates a timestamp and XSRF token for all state changing actions.\”\”\”\u003C\u002Fp\u003E\u003Cp\u003Etimestamp = time.time()  return timestamp + \”|\” + (str(hash(cookie_secret + cookie + timestamp)))\u003C\u002Fp\u003E\u003Cp\u003Edef _VerifyXsrfToken(self, cookie, action_token):  \”\”\”Verifies an XSRF token included in a request.\”\”\”\u003C\u002Fp\u003E\u003Cp\u003E# First, make sure that the token isn’t more than a day old.  (action_time, action_hash) =\u003C\u002Fp\u003E\u003Cp\u003Eaction_token.split(\”|\”,1)  now = time.time()  if now – 86400 \u003E float(action_time):    return False\u003C\u002Fp\u003E\u003Cp\u003E# Second, regenerate it and check that it matches the user supplied value\u003Cbr \u002F\u003E  hash_to_verify = str(hash(cookie_secret + cookie + action_time)  return action_hash == hash_to_verify\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E很遗憾,这个函数仍然有问题。\u003C\u002Fp\u003E\r\n\u003Cp\u003E因为令牌中包含时间,我们必须防止它永久有效,如果攻击者获得一个令牌的拷贝,他可以在24小时内反复使用它就麻烦了,令牌的过期时间应尽可能设得短一点,即使请求被攻击者拦截,也只能攻击一次,攻击者不能反复利用这个请求,令牌应该和特定的状态改变行为联系起来,如一个页面的URL,对于非常长的行为,如编辑一个微博,页面上的脚本可以查询服务器更新令牌。\u003C\u002Fp\u003E\r\n\u003Cp\u003EXSRF漏洞的存在让攻击者可以轻易构造一系列请求,为了阻止这种攻击,需要引入一些不可预知的值,让攻击者不是那么容易构造伪造的请求,有些应用程序框架内置了XSRF保护,它们会在每个响应中包含一个唯一的令牌,并且会验证每个POST请求。#p#\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E跨站脚本置入(XSSI)\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E浏览器可以阻止一个域名下的网页读取另一个域名下的网页,但它不能阻止一个域名下的网页引用另一个域名下的资源,特别是它们允许引用另一个域名下的图片,执行另一个域名下的脚步,引用的脚本无自己的安全上下文,它完全依赖引用它的页面的安全上下文,例如,如果\u003Ca%20href=\”http:\u002F\u002Fwww.evil.example.com\”\u003Ewww.evil.example.com\u003C\u002Fa\u003E包含了一个托管在\u003Ca%20href=\”http:\u002F\u002Fwww.google.com\”\u003Ewww.google.com\u003C\u002Fa\u003E上的脚本,这个脚本就运行在evil上下文而不是google上下文中,因此这个脚本中包含的任何用户数据都可能被泄露。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003EXSSI挑战\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:使用XSSI找到一个阅读他人私有微博的方法。\u003C\u002Fp\u003E\r\n\u003Cp\u003E在另一个网站上创建一个网页,在这个网页中插入一些代码,使其可以访问你的私有微博内容。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示1:将下面的代码添加到你的HTML页面,你可以从另一个域名运行脚本\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n\r\n\u003CSCRIPT src=\”\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F…\”\u003E\u003C\u002FSCRIPT\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F…\”\u003E\u003C\u002FSCRIPT\u003C\u002Fa\u003E\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E提示2:feed.jtl是一个脚本。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:将下面的代码插入一个HTML文件中\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E\u003Cscript\u003E\u003C\u002Fp\u003E\u003Cp\u003Efunction _feed(s) {\u003Cbr \u002F\u003E  \u003Cbr \u002F\u003Ealert(\”Your private snippet is: \” + s[‘private_snippet’]);\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003E\u003C\u002Fcript\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cscript src=\”\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl\”\u003E\u003C\u002Fscript\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Ffeed.jtl\”\u003E\u003C\u002Fscript\u003C\u002Fa\u003E\u003E\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E当feed.jtl中的脚本被执行时,它运行在攻击者页面的上下文中。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:首先使用XSRF令牌确保包含机密数据的JSON结果只会返回给你自己的页面,其次,你的JSON响应页面应该只支持POST请求,防止通过脚本标记载入脚本,第三,要确保脚本是不可执行的,标准的做法是增加一些不可执行的前缀,如])}while(1);\u003C\u002Fx\u003E,相同域名下的脚本可以读取响应的内容,自动卸掉前缀,但运行在另一个域名的脚本就不能读取响应的内容。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E路径遍历\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E一般来说,一个Web应用程序包含很多静态文件,如图片,CSS,JS文件等,正常情况下有些文件的访问是要经过验证的,但如果不小心,可能导致攻击者越权遍历整个网站的目录,例如,在Windows和Linux下,..代表父目录,如果你能在访问路径中注入..\u002F,那就意味着你可以访问到父目录中的文件。\u003C\u002Fp\u003E\r\n\u003Cp\u003E如果攻击者知道你的文件系统结构,那么他们可以构造一个URL遍历网站目录以外的目录,甚至是\u002Fetc,例如,如果Picasa有路径遍历漏洞,Picasa使用Unix类系统,那么下面的URL将可以窃取到系统密码文件:\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Ca%20href=\”http:\u002F\u002Fwww.picasa.com\u002F..\u002F..\u002F..\u002F..\u002F..\u002F..\u002F..\u002Fetc\u002Fpasswd\”\u003Ehttp:\u002F\u002Fwww.picasa.com\u002F..\u002F..\u002F..\u002F..\u002F..\u002F..\u002F..\u002Fetc\u002Fpasswd\u003C\u002Fa\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E通过路径遍历暴露信息\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:找到一个方法从Jarlsberg服务器读取secret.txt。\u003C\u002Fp\u003E\r\n\u003Cp\u003E这种攻击在许多情况下不是必需的,人们安装程序时往往不会修改默认位置,因此攻击者首先会尝试默认路径遍历。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示1:这不是一个黑盒攻击,因为你需要知道secret.txt文件是否存在,它位于哪里,以及Jarlsberg将它的资源文件存储在哪里,你不需要查看任何源代码。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示2:服务器如何知道哪个URL表示资源文件,你可以使用curl或Web代理构造一个请求URL。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E攻击方法:通过下面的URL窃取secret.txt\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F..\u002Fsecret.txt\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002F..\u002Fsecret.txt\u003C\u002Fa\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E有些浏览器,如Firefox和Chrome,优化了URL中的..\u002F输出,但这不能提供任何安全保障,因为攻击者可以使用类似curl、Web代理或是没做这种优化的浏览器等工具。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:我们需要阻止访问资源目录以外位置的文件,验证文件路径的办法有点麻烦,因为有很多种隐藏..\u002F或~等路径元素的办法,最佳的保护办法是只服务特定的资源文件,可以将其硬编码进你的应用程序,只接收访问这些文件的请求,如果非要做文件路径验证,那也只能对最终路径进行验证,而不是对URL进行验证,因为URL中的字符是可以转义的。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E通过路径遍历进行数据篡改\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:找到一个办法替换掉处于运行中的Jarlsberg服务器上的secret.txt。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示:如果我以用户brie登录并上传一个文件,服务器会将它存放在哪里?你可以欺骗服务器将上传文件替换掉..\u002Fsecret.txt吗?\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:创建一个新用户..,上传你的secret.txt,你也可以创建一个名叫brie\u002F..\u002F..的用户来达到同样的目的。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:需要对用户名进行危险字符转义,我们应该限制用户名允许的字符,另外还需要转换大小写,因为Windows下的文件名是不区分大小写的,而Jarlsberg要区分。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E拒绝服务(DoS)\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E拒绝服务攻击就是让服务器超负荷处理伪造的请求,使其无法为正常的请求提供服务,保护应用程序防止这种攻击超出了本文的范围,对Jarlsberg的DoS攻击将会转化为对App Engine的攻击。下面的任务是找出Jarlsberg中可以用来执行DoS攻击的bug。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003EDoS – 服务器停机攻击\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E最简单的攻击办法就是让服务器停机。\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:找出让服务器停机的办法。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示:管理员可以关闭服务器,管理页面是manage.jtl。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:向\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fquitserver\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fquitserver\u003C\u002Fa\u003E发送一个请求。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:只允许管理员访问\u002Fquitserver。\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\u003Cp\u003E_PROTECTED_URLS = [\u003Cbr \u002F\u003E    \u003Cbr \u002F\u003E\”\u002Fquitserver\”,\u003Cbr \u002F\u003E    \u003Cbr \u002F\u003E\”\u002Freset\”\u003C\u002Fp\u003E\u003Cp\u003E]\u003C\u002Fp\u003E\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E\u003Cstrong\u003EDoS – 服务器超负荷攻击\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E任务:找到一个让服务器处理一个请求就超负荷工作的方法。\u003C\u002Fp\u003E\r\n\u003Cp\u003E提示:可以上传一个模板来实现,每个页面都包含menubar.jtl模板。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:创建menubar.jtl文件,包含\u003C\u002Fp\u003E\r\n\u003Ctable border=\”1\” cellspacing=\”0\” bordercolorlight=\”#000000\” bordercolordark=\”#ffffff\” cellpadding=\”2\” width=\”400\” align=\”center\”\u003E\r\n \u003Ctbody\u003E\r\n \u003Ctr\u003E\r\n \u003Ctd class=\”code\” bgcolor=\”#e6e6e6\”\u003E\r\n \u003Cpre\u003E\r\n[[include:menubar.jtl]]DoS[[\u002Finclude:menubar.jtl]]\u003C\u002Fpre\u003E\r\n \u003C\u002Ftd\u003E\r\n \u003C\u002Ftr\u003E\r\n \u003C\u002Ftbody\u003E\r\n\u003C\u002Ftable\u003E\r\n\u003Cp\u003E使用路径遍历攻击将其上传到resources目录。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:和前面一样,实现路径遍历保护。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E代码执行\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E如果攻击者能远程在你服务器上执行任意代码,那表示你玩完了,遗憾的是目前也没有一个万能的方法来预防远程代码执行,因此只有靠程序本身进行验证。\u003C\u002Fp\u003E\r\n\u003Cp\u003E攻击方法:通过修改jtl.py,置入恶意代码,然后上传替换掉原来的jtl.py,通过\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fquitserver\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fquitserver\u003C\u002Fa\u003E让服务器关机,等它重启后,置入的恶意代码就开始工作了。\u003C\u002Fp\u003E\r\n\u003Cp\u003EJarlsberg也有这个漏洞,因为Jarlsberg目录允许写入文件,这违背了最小权限原则。\u003C\u002Fp\u003E\r\n\u003Cp\u003E修复办法:修复前面两个漏洞即可。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E配置漏洞\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E黑客们都非常熟悉常用应用系统的默认设置,如按照目录,默认管理员用户和密码等,如果配置不当,也相当于暴露了系统的漏洞。我们常见的如调试选项默认被开启,默认的状态页,堆栈转储跟踪等都属于配置漏洞。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E信息泄露\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003E比如通过\u003Ca%20href=\”http:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fdump.jtl\”\u003Ehttp:\u002F\u002Fjarlsberg.appspot.com\u002F123\u002Fdump.jtl\u003C\u002Fa\u003E就可以暴露出Jarlsberg的数据库内容,唯一的办法就是删除\u002Fdump.jtl,如果非要开启调试功能,那最好只允许管理员访问,同时开启IP地址访问限制。\u003C\u002Fp\u003E\r\n\u003Cp\u003E通过暴库,我们可以获得系统用户名和密码,因此密码最好使用哈希值保存。\u003C\u002Fp\u003E\r\n\u003Cp\u003E虽然我们可以删除原始的dump.jtl,但Jarlsberg有文件上传漏洞,因此攻击者可以构造自己的dump.jtl,我们只能限制用户上传,或是用户上传的文件不能和Web应用程序位于同一位置,另外也可以限制上传的文件类型。\u003C\u002Fp\u003E\r\n\u003Cp\u003E\u003Cstrong\u003E总结\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\r\n\u003Cp\u003EWeb应用程序的安全涉及的内容很多,从代码到配置都必须引起重视,可能一个小小的失误就会导致整个服务器被攻击者控制,安全从来就是相对的,攻防技术是不断发展和变化的,加强学习和实战是提高的唯一办法。  \u003C\u002Fp\u003E\r\n\u003Cp\u003E【.COM 独家翻译,转载请注明出处及作者!】\u003C\u002Fp\u003E\r\n\u003Cp\u003E【编辑推荐】\u003C\u002Fp\u003E\r\n\u003Col\u003E\r\n \u003Cli\u003E\u003Ca%20href=\”http:\u002F\u002Fnetsecurity.\u002Fart\u002F201003\u002F186669.htm \”\u003E黑客WEB攻击新动向:劫持域名换手法\u003C\u002Fa\u003E\u003C\u002Fli\u003E\r\n \u003Cli\u003E\u003Ca%20href=\”http:\u002F\u002Fnetsecurity.\u002Fart\u002F201005\u002F199281.htm \”\u003E黑帽搜索引擎毒化Web安全环境\u003C\u002Fa\u003E\u003C\u002Fli\u003E\r\n\u003C\u002Fol\u003E “,cover:a,article_status:d,is_old:q,content_type:[],factor_pub_date:”2010-05-20T09:48:36″,factor_up_date:”2022-12-16T20:26:38″,title_extension:”web 应用程序”,editor_version:c,factor_image_url:[a],parent_topic_id:f,advert_list:[{advert_name:”article_top_navigation”,url:”https:\u002F\u002Fgg1.\u002Fwww\u002Fdelivery\u002Fajs.php?zoneid=1172&cb=1705246189″},{advert_name:”article_right_corner”,url:”https:\u002F\u002Fgg1.\u002Fwww\u002Fdelivery\u002Fajs.php?zoneid=1171&cb=1705246189″},{advert_name:”article_link_text_one”,url:”https:\u002F\u002Fgg1.\u002Fwww\u002Fdelivery\u002Fajs.php?zoneid=1173&cb=1705246189″},{advert_name:”article_link_text_two”,url:”https:\u002F\u002Fgg1.\u002Fwww\u002Fdelivery\u002Fajs.php?zoneid=1174&cb=1705246189″},{advert_name:”article_link_text_three”,url:”https:\u002F\u002Fgg2.\u002Fwww\u002Fdelivery\u002Fajs.php?zoneid=1175&cb=1705246189″},{advert_name:”article_link_text_four”,url:”https:\u002F\u002Fgg1.\u002Fwww\u002Fdelivery\u002Fajs.php?zoneid=1176&cb=1705246189″}]},keywordsStr:”黑客,Web安全”,isError:e,new_specials:[{name:”网络运维智能化?瞻博网络有奇招!”,url:”https:\u002F\u002Fwww.\u002Fact\u002Fjuniper\u002F2023″,cover:”https:\u002F\u002Fs7.\u002Foss\u002F202312\u002F18\u002F66b0d62436766e8f3f73393dd90f4715098679.jpg”,created_at:”2023-12-18 11:43:34″},{name:”2023年数据中心热门技术回顾”,url:”https:\u002F\u002Fserver.\u002Fact\u002Fdatacenter\u002F20231216″,cover:”https:\u002F\u002Fs6.\u002Foss\u002F202312\u002F18\u002F027042578ce036b1e02142a2d30c90c75d6c84.jpg”,created_at:”2023-12-18 09:33:33″},{name:”2023年第十八届中国企业年终评选榜单公布!”,url:”https:\u002F\u002Fcloud.\u002Fact\u002Fnzpxresult\u002F2023″,cover:”https:\u002F\u002Fs4.\u002Foss\u002F202312\u002F28\u002Ff529d3086dfcd0886d4232861fd628895d0c7d.jpg”,created_at:”2023-12-28 20:12:38″}],editor_recommend:[{article_id:F,title:”2023年网络攻击事件盘点”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F778045.html”,topic:[{id:531097,article_id:F,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]},{article_id:G,title:”2024年的五大关键网络安全趋势”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F778078.html”,topic:[{id:531141,article_id:G,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]},{article_id:H,title:”欧盟网络安全威胁:虚假与错误信息”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F771247.html”,topic:[{id:519040,article_id:H,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]},{article_id:r,title:I,url:J,topic:[{id:K,article_id:r,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]},{article_id:v,title:”2023年加密钓鱼诈骗报告:常见网络钓鱼手法大揭秘”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F778663.html”,topic:[{id:532193,article_id:v,parent_topic_id:f,topic_id:h,sort:b,topic_status:d},{id:532194,article_id:v,parent_topic_id:70,topic_id:c,sort:g,topic_status:d}]}],hot_articles:[{article_id:r,title:I,url:J,topic:[{id:K,article_id:r,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]},{article_id:L,title:”2024年网络安全趋势:人工智能、云计算和威胁情报”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F779236.html”,topic:[{id:533267,article_id:L,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]},{article_id:M,title:”深入浅出SSH隧道穿透”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F778931.html”,topic:[{id:532684,article_id:M,parent_topic_id:f,topic_id:h,sort:b,topic_status:b}]},{article_id:w,title:”迄今最详细的人工智能网络攻击分类指南”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F778970.html”,topic:[{id:532750,article_id:w,parent_topic_id:f,topic_id:h,sort:b,topic_status:d},{id:532751,article_id:w,parent_topic_id:N,topic_id:c,sort:g,topic_status:d}]},{article_id:x,title:”如何应对深度伪造和合成媒体对网络安全的影响?”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F779123.html”,topic:[{id:533016,article_id:x,parent_topic_id:f,topic_id:h,sort:b,topic_status:d},{id:533017,article_id:x,parent_topic_id:107,topic_id:c,sort:g,topic_status:d}]},{article_id:O,title:”企业如何实现强加密安全防护?”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F779068.html”,topic:[{id:532906,article_id:O,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]},{article_id:P,title:”分析恶意软件时可能遇到的三个常见问题”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F778959.html”,topic:[{id:532735,article_id:P,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]},{article_id:Q,title:”2023年企业网络安全预算情况观察与发现”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F778806.html”,topic:[{id:532488,article_id:Q,parent_topic_id:f,topic_id:h,sort:b,topic_status:d}]}],recommend_topic:[{topic_id:R,name:”网站安全”,name_en:”website”,parent_id:f,sort:b,article_num:1108,pv_num:c,url:”https:\u002F\u002Fwww.\u002Fwebsite”,edu_cate_ids:a,blog_cate_ids:a,hm_cate_ids:a},{topic_id:S,name:”数据安全”,name_en:”data”,parent_id:f,sort:b,article_num:2962,pv_num:c,url:”https:\u002F\u002Fwww.\u002Fdata”,edu_cate_ids:”297″,blog_cate_ids:a,hm_cate_ids:a},{topic_id:35,name:”云安全”,name_en:”cloudsecurity”,parent_id:f,sort:b,article_num:1830,pv_num:c,url:”https:\u002F\u002Fwww.\u002Fcloudsecurity”,edu_cate_ids:a,blog_cate_ids:a,hm_cate_ids:a},{topic_id:36,name:”物联网安全”,name_en:”iotsecurity”,parent_id:f,sort:b,article_num:793,pv_num:c,url:”https:\u002F\u002Fwww.\u002Fiotsecurity”,edu_cate_ids:a,blog_cate_ids:a,hm_cate_ids:a}],recommend_article:[{article_id:266440,abstract:”iPadiPhone应用程序开发和开发网站相比,需要完全不同的技巧,也许你过去多年的技术积累现在一点用场也派不上。本文介绍了如何使用现有的技能为iPad开发Web应用程序。”,cover:a,title:”\u003Cem\u003E实战\u003C\u002Fem\u003E:如何做iPad \u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E开发”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F266440.html”,pubdate:”2011-06-01 13:20:29″,keyword:[{name:”ipad”,url:”https:\u002F\u002Fso.\u002F?keywords=ipad”},{name:”平板电脑”,url:”https:\u002F\u002Fso.\u002F?keywords=%E5%B9%B3%E6%9D%BF%E7%94%B5%E8%84%91″},{name:T,url:”https:\u002F\u002Fso.\u002F?keywords=%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91″}],article_type:[]},{article_id:758988,abstract:”在这里,我们将介绍如何使用Flask构建一个完整的Web应用程序,包括使用FlaskRESTful构建RESTfulAPI、使用FlaskSQLAlchemy进行数据库操作、使用Flaskwtf进行表单验证和使用FlaskJWT进行身份认证和授权。”,cover:”https:\u002F\u002Fs8.\u002Foss\u002F202306\u002F29\u002F728958d61cfdd7d4e83327e6b6992be339dcf8.png?x-oss-process=image\u002Fresize,m_fixed,w_142,h_82″,title:”使用 Flask 构建 \u003Cem\u003EWeb\u003C\u002Fem\u003E \u003Cem\u003E应用程序\u003C\u002Fem\u003E:完整\u003Cem\u003E实战\u003C\u002Fem\u003E教程”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F758988.html”,pubdate:”2023-06-29 07:45:03″,keyword:[],article_type:[]},{article_id:125899,abstract:”Flash应用程序(即SWF文件)不仅可以通过web协议进行分发,并且还能读取本地或者远程文件、建立网络连接,以及跟其他SWF文件进行通信等。通过本文,您将了解具体的Flash攻击手段,有用的Flash安全审查技巧以及安全有关的开发配置技术。”,cover:a,title:”Flash\u003Cem\u003E应用程序\u003C\u002Fem\u003E安全\u003Cem\u003E攻防\u003C\u002Fem\u003E战”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F125899.html”,pubdate:”2009-05-27 15:11:24″,keyword:[],article_type:{name:n,url:o}},{article_id:250194,abstract:”用过LAMP的人们都知道,LAMP是由Linux+Apache+Mysql+PerlPHPPython一起组成的,本文来具体介绍下Web应用程序平台:LAMP”,cover:a,title:”\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E平台–LAMP”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F250194.html”,pubdate:”2011-03-22 14:12:17″,keyword:[{name:”LAMP”,url:”https:\u002F\u002Fso.\u002F?keywords=LAMP”}],article_type:[]},{article_id:135272,abstract:”本文简单介绍Servlet的Web应用程序,以及介绍载入Servlet,cookie是如何工作的和eCourt会话等。”,cover:a,title:”浅析Servlet的\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F135272.html”,pubdate:”2009-07-09 16:47:26″,keyword:[{name:”Servlet的Web应用程序”,url:”https:\u002F\u002Fso.\u002F?keywords=Servlet%E7%9A%84Web%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F”}],article_type:[]},{article_id:182059,abstract:”PythonWeb应用程序的交互性首先表现在它的超连接上,用户的浏览顺序和所到站点完全由他自己决定,另外通过FORM的形式可以从服务器方获得动态的信息。”,cover:a,title:”深度剖析Python \u003Cem\u003EWeb\u003C\u002Fem\u003E \u003Cem\u003E应用程序\u003C\u002Fem\u003E”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F182059.html”,pubdate:”2010-02-01 14:05:03″,keyword:[],article_type:[]},{article_id:117833,abstract:”Web是近几年的热点,各种各样的服务都开始网络化,用户的敏感信息也开始不只是存储在自己的计算机里,而开始存储在服务提供商的数据库里。”,cover:a,title:”\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E中的rootkit”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F117833.html”,pubdate:”2009-04-01 14:33:33″,keyword:[],article_type:[]},{article_id:341307,abstract:”以业务为中心的Web互动迅速发展也带来了新的信息安全威胁,而企业以前的静态网页并没有这些威胁。这些威胁主要是针对Web应用程序,包括补充的Web服务器、数据库和其他支持基础设施。”,cover:a,title:”如何缓解\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E威胁”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F341307.html”,pubdate:”2012-06-11 09:37:41″,keyword:[],article_type:[]},{article_id:324198,abstract:”Go语言写Web应用程序,涵盖内容:为载入和保存方法创建一个数据结构体,引用http包来创建一个web应用,引用template包来处理HTML模板,引用regexp包来验证用户的输入,引用闭包操作。”,cover:a,title:”Go语言写\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F324198.html”,pubdate:”2012-03-20 09:20:40″,keyword:[{name:”Go语言”,url:”https:\u002F\u002Fso.\u002F?keywords=Go%E8%AF%AD%E8%A8%80″}],article_type:[]},{article_id:406445,abstract:”Arunr把过去15年以来,Web开发从最初的纯HTML到CGI、PHP\\JSP\\ASP、Ajax、Rails、NodeJS这个过程简要地进行了介绍。Arunr计划把这个作为一个大纲,接下来把每一部分详细地写点东西。如果你想了解Web开发的转变轨迹,推荐看看这篇文章。”,cover:a,title:”\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E开发演变史”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F406445.html”,pubdate:”2013-08-08 09:48:10″,keyword:[{name:”Web”,url:”https:\u002F\u002Fso.\u002F?keywords=Web”}],article_type:[]},{article_id:187653,abstract:”文章以使用LotusConnections2.5为例,揭示了项目团队在开发满足可访问性需求的Web2.0应用程序时获得的一些经验教训和最佳实践,同时也讨论了可访问性验证工具,比如JAWS、WebKing,以及HighContrast模型测试和Web2.0应用程序的HTML代码中的ARIA标记标签的使用。”,cover:a,title:”\u003Cem\u003EWeb\u003C\u002Fem\u003E 2.0\u003Cem\u003E应用程序\u003C\u002Fem\u003E最佳实践”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F187653.html”,pubdate:”2010-03-09 13:27:23″,keyword:[{name:”Web 2.0应用程序”,url:”https:\u002F\u002Fso.\u002F?keywords=Web+2.0%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F”}],article_type:[]},{article_id:744399,abstract:”在本文中,您将了解Web应用程序架构图的外观以及如何为Web应用程序设计正确的架构。”,cover:”https:\u002F\u002Fs6.\u002Foss\u002F202301\u002F09\u002F4750a0589b92c1813bc46837bd37d19c870632.jpg?x-oss-process=image\u002Fresize,m_fixed,w_142,h_82″,title:”\u003Cem\u003EWeb\u003C\u002Fem\u003E \u003Cem\u003E应用程序\u003C\u002Fem\u003E架构:最新指南”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F744399.html”,pubdate:”2023-01-09 17:04:24″,keyword:[],article_type:[]},{article_id:417870,abstract:”本文我们将针对如何为云环境开发安全的应用程序以抵御常见攻击提供一些指导,并探讨一些需要落实到位的控制因素,以确保基于云的应用程序在开发和部署时的安全性。”,cover:a,title:”如何基于\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E安全经验来开发云\u003Cem\u003E应用程序\u003C\u002Fem\u003E?”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F417870.html”,pubdate:”2013-11-19 15:35:01″,keyword:[],article_type:[]},{article_id:147351,abstract:”大部分开发人员(不管他们是否测试自己的代码)至少都了解过关于代码测试的课程。Web开发人员—比大部分开发人员更了解代码测试—需要快速交付应用程序,因此常常会因为交付期限紧迫而忽略单元测试。在某些流程中,忽略对代码进行单元测试是不妥当的,因为单元测试能够测试应用程序的实际组件,并且向其他开发人员解释代码的内部工作。对Web应用程序进行功…”,cover:a,title:”使用开源工具测试 \u003Cem\u003EWeb\u003C\u002Fem\u003E \u003Cem\u003E应用程序\u003C\u002Fem\u003E”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F147351.html”,pubdate:”2009-08-27 11:40:43″,keyword:[{name:U,url:V},{name:W,url:”https:\u002F\u002Fso.\u002F?keywords=%E4%BA%91%E8%AE%A1%E7%AE%97″}],article_type:[]},{article_id:112127,abstract:”随着信息技术的告诉发展,企业中的信息系统越来越复杂,就目前的趋势而言,Web应用程序在企业中占据主要地位,因此企业越来越依赖于Web应用程序,目前在安全方面考虑最多的可能是在服务器前部署防火墙,开启SSL协议和主机加固,但遗憾的是攻击的主要目标现在已经逐渐转移到Web应用程序本身了,这些保护措施已经变得越来越没有用了。”,cover:a,title:”理解\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E的安全挑战”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F112127.html”,pubdate:”2009-02-27 17:00:25″,keyword:[],article_type:{name:n,url:o}},{article_id:205611,abstract:”在本篇本章,通过更精彩的功能来进一步扩展您的jQuery知识,并向老的Internet应用程序添加一些真正的“富”特性,使这个演示应用程序成为富Internet应用程序。”,cover:a,title:”使用jQuery构建未来\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F205611.html”,pubdate:”2010-06-13 09:22:37″,keyword:[{name:”jQuery”,url:”https:\u002F\u002Fso.\u002F?keywords=jQuery”}],article_type:[]},{article_id:588016,abstract:”Django是目前Python开发人员使用的主要Web框架,并且原因显而易见。它擅长隐藏大量的配置逻辑,让你专注于能够快速构建大型应用程序。”,cover:a,title:”Python \u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003EDjango框架简介”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F588016.html”,pubdate:”2018-12-03 08:25:24″,keyword:[],article_type:[]},{article_id:330971,abstract:”大多数组织中只有大约25%的数据属于敏感数据,这引发一个问题:您是否应该将云应用程序设计为使用全部的可用安全资源来保护所有的数据类型?这种方式十分消耗资源;但您还可以采用另一种方法。在本文中,作者将为企业中的每种数据创建三个分类,当您在设计将使用这些数据的应用程序时,可以利用这些分类判断如何应用安全性。这被称为RegulatoryCompliantCl…”,cover:a,title:”构建合规的 \u003Cem\u003EWeb\u003C\u002Fem\u003E \u003Cem\u003E应用程序\u003C\u002Fem\u003E”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F330971.html”,pubdate:”2012-04-19 09:34:21″,keyword:[{name:U,url:V}],article_type:[]},{article_id:140152,abstract:”本文介绍在ASP.NET中,Web应用程序和会话状态被分别进行维护,通过HttpApplication和HttpSessionState分离Web应用程序与会话的功能。”,cover:a,title:”ASP.NET中\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F140152.html”,pubdate:”2009-07-29 10:30:53″,keyword:[{name:”Web应用程序”,url:”https:\u002F\u002Fso.\u002F?keywords=Web%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F”},{name:”ASP.NET”,url:”https:\u002F\u002Fso.\u002F?keywords=ASP.NET”}],article_type:[]},{article_id:233843,abstract:”微软宣布了第一款“CertifiedforWindows”的开源Web应用程序。微软认证代表着该程序在Windows上运行毫无问题。”,cover:a,title:”微软首次认证开源\u003Cem\u003EWeb\u003C\u002Fem\u003E\u003Cem\u003E应用程序\u003C\u002Fem\u003E”,url:”https:\u002F\u002Fwww.\u002Farticle\u002F233843.html”,pubdate:”2010-11-18 09:32:19″,keyword:[{name:”微软”,url:”https:\u002F\u002Fso.\u002F?keywords=%E5%BE%AE%E8%BD%AF”},{name:”开源Web应用程序”,url:”https:\u002F\u002Fso.\u002F?keywords=%E5%BC%80%E6%BA%90Web%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F”}],article_type:[]}]}],fetch:{},error:null,state:{config:{origin:X,baseURL:”https:\u002F\u002Fapi-media.”,publicPath:”https:\u002F\u002Fs5-media.\u002Fcms\u002Fclient”,staticPath:”https:\u002F\u002Fs5-media.\u002Fcms\u002Fstatic”,HOME_URL:”https:\u002F\u002Fhome.”,SPECIAL_URL:Y,AD_URL:”https:\u002F\u002Fgg.\u002Fwww\u002Fdelivery\u002Fajs.php”,topic:”www”,eduURL:Z,title:”技术成就梦想-中国知名的数字化人才学习平台和技术社区”,aboutTitle:”技术成就梦想-中国知名的数字化人才学习平台和技术社区-.COM”,NODE_ENV:”production”,alife:”prod”,des:y,keywords:”技术媒体,在线教育,视频课程,企业培训,鸿蒙社区,开发者社区,资讯,职场,技术博客,软考,认证考试,开发,编程语言,物联网,HarmonyOS,人工智能,大数据,国产化,软件开发,网络,系统,操作系统,运维,安全,存储,数据库,企业解决方案,华为”,tdk:{developer:{title:”开发频道-.COM-中国知名的数字化人才学习平台和技术社区”,des:”开发频道是IT开发技术领域的知名技术门户。主要内容包括架构设计、项目管理、编程语言、开发工具、大数据等多个领域,为广大IT专业技术人员提供丰富的技术文章及专题资源。开发频道用户涵盖程序员、架构师、项目经理和企业CTO等不同层次,在整个中国开发技术领域起到信息传播和服务的平台作用。”,keywords:”Java,.NET,Web,HTML5,Python,Scala,JVM,C++,PHP,测试,软件测试,单元测试,架构,架构设计,项目管理,编程语言,大数据,NOSQL,设计,程序员”},mobile:{title:”移动开发-.COM-中国知名的数字化人才学习平台和技术社区”,des:”移动开发频道,为智能手机和移动设备的应用开发者提供Android、iPhone、WindowsPhone、MeeGo、Ophone、Widget等多个移动平台的技术知识与资讯,融合移动开发领域的技术专家和厂商,提供技术趋势的方向性指引与行业发展分析。”,keywords:”移动,应用开发,移动开发,移动应用运营,移动信息化”},os:{title:”系统频道-.COM-中国知名的数字化人才学习平台和技术社区”,des:”系统频道为读者提供企业级Linux、Unix以及Windows系统管理相关的技术文章、专题与资讯,为入门者提供资料与指引,并对基于移动智能设备以及浏览器的下一代系统平台进行前瞻性的探讨。”,keywords:”操作系统,OS,Linux,Unix,Windows,Mac,开源,移动OS,浏览器”},network:{title:”网络频道-网络技术专家-.COM-中国知名的数字化人才学习平台和技术社区”,des:”网络频道主要提供网络技术、网络传输、网络性能提升、有线网络、无线网络、通信网络、网络管理、网络运维、网络可视化、网络优化、路由技术、交换网络等方面的技术文档和新闻资讯等专业服务。百余个网络技术专题,超过10万篇技术文章,让您轻松掌握整个IT网络技术领域的最新动向。”,keywords:”路由器,交换机,统一通信,超融合,基础架构,云,数据中心,通信,无线,布线,5G,网络融合,网络优化,网络可视化,sdn,nfv,wifi,边缘计算,智能化,数字化转型,无线路由器,智能路由器,路由器设置,交换机设置,智能交换机,万兆以太网,软件定义网络,软件定义广域网,sd-wan,交换网,无线网络,无线网络设备,如何设置路由器,无线路由,综合布线,云计算,大数据,负载均衡,性能优化,流量分析,上网行为管理,网络协议,行业专网,操作系统,虚拟化,云数据中心,资源池”},netsecurity:{title:”网络安全频道-.COM-中国知名的数字化人才学习平台和技术社区”,des:”安全频道是IT网络安全领域知名的门户频道。技术成就梦想,而源于专业,安全频道拥有百余个专业的安全技术专题,超过10万篇技术文章,涵盖了整个IT网络安全领域。”,keywords:”网络安全,病毒,黑客,防火墙,攻击,勒索软件,防御,UTM,IDS\u002FIPS,ARP,DDoS,安全技术,APT,Sniffer,杀毒,杀毒软件,查杀,工控安全,漏洞,系统安全,数据安全,安全管理,密码,破解,补丁,防病毒,云安全,流氓软件,恶意软件,大数据安全,信息安全,虚拟化安全,网站安全,中毒,加密,解密,脚本攻击,网络钓鱼,蠕虫,木马,邮件安全,数据库安全,入侵检测,入侵防御,服务器安全,拒绝服务攻击,欺骗,VPN网关,反病毒,垃圾邮件,SSLVPN”},database:{title:”数据库频道-.COM-中国知名的数字化人才学习平台和技术社区”,des:”数据库频道,为数据库工程师和管理人员提供数据库技术资讯,内容包括oracle\u002Fsqlserver\u002Fsybase\u002Fjava\u002Fmysql\u002Fasp.net\u002Fdb2数据库前沿技术,数据基础、数据库管理、数据库开发和数据库安全和培训等方面。”,keywords:”数据库,sql数据库,oracle数据库,access数据库,数据库软件,数据库设计,数据库教程,数据库管理,开发,营销,培训”},contentCenter:{title:”内容中心-为技术人员提供优质内容和服务,赋能技术人员成长”,des:_,keywords:$},editor:{title:”社区编辑-汇聚独到见解乐于分享的优秀技术人-.COM”,des:y,keywords:aa},personEditor:{title:”的个人主页-技术成就梦想-中国知名的数字化人才学习平台和技术社区-.COM”,des:y,keywords:aa},centerList:{title:”技术精选特刊-技术成就梦想-中国知名的数字化人才学习平台和技术社区-.COM”,des:”技术精选特刊是内容中心为高级技术开发人员和企业管理人员特别推出的刊物。本刊将时刻关注编程、开源、大前端、大数据、云原生、物联网、人工智能、元宇宙等众多技术领域的演进与创新,为读者深度解读技术领域的变化与走向。”,keywords:ab},centerDetail:{title:”-技术成就梦想-中国知名的数字化人才学习平台和技术社区-.COM”,des:”-刊物介绍。”,keywords:ab},author:{title:”内容中心编辑团队-前沿科技的传播者,数字化转型的记录者-.com”,des:”内容中心编辑团队由二十余位资历深厚的编辑组成,秉持创新、深度、专业、多元的原则,以文章、视频、直播、沙龙等不同形式输出优质内容,话题涵盖人工智能、元宇宙、云原生、开源、架构、开发、安全等多个技术领域,旨在为各领域技术人员提供技术学习、技能提升、行业应用、资源整合等多方位的服务与支持;为转型中的企业提出全新视角,助力其把握数字经济发展机遇,抢占市场发展先机。”,keywords:”内容中心编辑团队,内容中心,技术媒体,在线教育,视频课程,企业培训,鸿蒙社区,开发者社区,资讯,职场,技术博客,软考,认证考试,开发,编程语言,物联网,HarmonyOS,人工智能,大数据,国产化,软件开发,网络,系统,操作系统,运维,安全,存储,数据库,企业解决方案,华为”},videoList:{title:”-为技术人员提供优质内容和服务,赋能技术人员成长”,des:_,keywords:”视频,内容中心,技术媒体,在线教育,视频课程,企业培训,鸿蒙社区,开发者社区,资讯,职场,技术博客,软考,认证考试,开发,编程语言,物联网,HarmonyOS,人工智能,大数据,国产化,软件开发,网络,系统,操作系统,运维,安全,存储,数据库,企业解决方案,华为”},acticityList:{title:”活动-.COM-中国知名的数字化人才学习平台和技术社区”,des:”活动专区,直播、线上活动、线下活动,为技术人员提供优质内容和服务,赋能技术人员成长”,keywords:$}},server_url:”https:\u002F\u002Fsc.\u002Fsa?project=production”,oldurl:[“other.”]},token:”QVFCUlV3b0dDUXRlQlZZRUlHVjlHeVo3YWxkUkQxWQ”,tokentime:1705248985,pcmobile:”pc”,topData:{bannerList:[],hotList:[],courseList:[],trainList:[],lineList:{}},centerData:{recommend:[],wayTopic:[],wapSpecial:[],ctoInfo:[],weekArticles:[],hmArticles:{},blogArticles:[],blogEtp:[],enterpriseSchool:[],hmRecommend:[]},hotList:[],topicList:[{topic_id:a,name:”推荐”,name_en:a,url:a}],page:b,page_size:50,limit_time:c,name_en:a,showMore:e,total_count:c,courseList:[],recommendData:[],liveData:[],footerHeight:c,postionShow:e,leftPostionShow:e,showBackground:e,ad:{adscript:{},navtop:e,navbottom:e,navbottomNew:e,headlinebottom:e,jing:e,articleFlag:e,topicThreeFlag:e},center:{journalList:[],journalListCount:c,journalView:{},isFirstReqList:q,JournalListPC:[],journalListCountPC:c,firstJournal:{},journalId:c,factor_up_date:a,centerTopic:[{name:”精选”,id:c},{name:ac,id:N},{name:ad,id:118},{name:”云原生”,id:75},{name:ae,id:104},{name:”架构”,id:s},{name:af,id:51},{name:p,id:f},{name:ag,id:b},{name:z,id:120}]},nav:{topnavData:[{navId:b,parentNavId:c,title:”首页”,navUrl:X,iconUrl:a,navSort:b,childDetail:[],isshow:e},{navId:g,parentNavId:c,title:ah,navUrl:”https:\u002F\u002Fwww.\u002Fdev?utm_source=hometop”,iconUrl:a,navSort:g,childDetail:[],isshow:e},{navId:k,parentNavId:c,title:”博客”,navUrl:A,iconUrl:a,navSort:k,childDetail:[],isshow:e},{navId:i,parentNavId:c,title:”学堂”,navUrl:”https:\u002F\u002Fedu.\u002F?utm_source=hometop”,iconUrl:a,navSort:i,childDetail:[{navId:f,parentNavId:i,title:ai,navUrl:aj,iconUrl:a,navSort:b},{navId:ak,parentNavId:i,title:”免费课程”,navUrl:”https:\u002F\u002Fedu.\u002Fcourselist\u002Findex-zh5.html?utm_source=hometop”,iconUrl:a,navSort:g},{navId:al,parentNavId:i,title:”课程排行”,navUrl:”https:\u002F\u002Fedu.\u002Franking\u002Findex.html?utm_source=hometop”,iconUrl:a,navSort:k},{navId:13,parentNavId:i,title:”直播课”,navUrl:”https:\u002F\u002Fe.\u002Fncamp\u002Flist?utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=13″,iconUrl:a,navSort:i},{navId:14,parentNavId:i,title:”软考学堂”,navUrl:”https:\u002F\u002Fe.\u002Frk\u002F?utm_platform=pc&utm_medi-um=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=14″,iconUrl:a,navSort:d}],isshow:e},{navId:d,parentNavId:c,title:”精品班”,navUrl:”https:\u002F\u002Fe.\u002F?utm_platform=pc&utm_medi-um=51cto&utm_source=zhuzhan&utm_content=sy_topbar”,iconUrl:”https:\u002F\u002Fs2.\u002Foss\u002F202312\u002F22\u002Fd63741682abe5437c1859125feed3088debd88.png”,navSort:d,childDetail:[{navId:15,parentNavId:d,title:”全部课程”,navUrl:”https:\u002F\u002Fe.\u002Fwejob\u002Flist?utm_platform=pc&utm_medi-um=51cto&utm_source=zhuzhan&utm_content=sy_topbar”,iconUrl:a,navSort:b},{navId:16,parentNavId:d,title:”厂商认证”,navUrl:”https:\u002F\u002Fe.\u002Fwejob\u002Flist?pid=5&utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=41″,iconUrl:a,navSort:g},{navId:17,parentNavId:d,title:”IT技术”,navUrl:”https:\u002F\u002Fe.\u002Fwejob\u002Flist?pid=1&utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=42″,iconUrl:a,navSort:k},{navId:18,parentNavId:d,title:”2024年软考”,navUrl:”https:\u002F\u002Fe.\u002Frk\u002F?utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_xyzq_rightwzl&rtm_frd=07&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=43″,iconUrl:a,navSort:i},{navId:19,parentNavId:d,title:”PMP项目管理”,navUrl:”https:\u002F\u002Fe.\u002Fwejob\u002Flist?pid=33&utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=44″,iconUrl:a,navSort:d},{navId:R,parentNavId:d,title:am,navUrl:an,iconUrl:a,navSort:l}],isshow:e},{navId:S,parentNavId:c,title:”直播训练营”,navUrl:”https:\u002F\u002Fedu.\u002Fsurl=o0bwJ2″,iconUrl:a,navSort:l,childDetail:[],isshow:e},{navId:l,parentNavId:c,title:ao,navUrl:B,iconUrl:a,navSort:m,childDetail:[{navId:20,parentNavId:l,title:”在线学习”,navUrl:B,iconUrl:a,navSort:b}],isshow:e},{navId:m,parentNavId:c,title:t,navUrl:ap,iconUrl:a,navSort:s,childDetail:[{navId:28,parentNavId:m,title:t,navUrl:ap,iconUrl:a,navSort:b},{navId:29,parentNavId:m,title:”技术经理研习营”,navUrl:”https:\u002F\u002Fx.\u002Fact\u002Fcto\u002Ftl”,iconUrl:a,navSort:g},{navId:30,parentNavId:m,title:”LeaTech峰会”,navUrl:”https:\u002F\u002Fx.\u002Fact\u002Fcto\u002Fleatech2021?www1″,iconUrl:a,navSort:k}],isshow:e},{navId:j,parentNavId:c,title:u,navUrl:”https:\u002F\u002Fost.\u002F?utm_source=hometop”,iconUrl:a,navSort:j,childDetail:[{navId:22,parentNavId:j,title:”文章”,navUrl:”https:\u002F\u002Fost.\u002Fpostlist”,iconUrl:a,navSort:b},{navId:23,parentNavId:j,title:”资源”,navUrl:”https:\u002F\u002Fost.\u002Fresource”,iconUrl:a,navSort:g},{navId:24,parentNavId:j,title:”问答”,navUrl:”https:\u002F\u002Fost.\u002Fanswerlist”,iconUrl:a,navSort:k},{navId:25,parentNavId:j,title:”课堂”,navUrl:”https:\u002F\u002Fost.\u002Fstudy”,iconUrl:a,navSort:i},{navId:26,parentNavId:j,title:”专栏”,navUrl:”https:\u002F\u002Fost.\u002Fcolumn”,iconUrl:a,navSort:d},{navId:27,parentNavId:j,title:aq,navUrl:”https:\u002F\u002Fost.\u002Factivity”,iconUrl:a,navSort:l}],isshow:e},{navId:C,parentNavId:c,title:”WOT全球技术创新大会”,navUrl:”https:\u002F\u002Fwot.\u002F?utm_source=dhl”,iconUrl:a,navSort:C,childDetail:[],isshow:e}],weChatQRcode:[{navId:b,navType:b,navName:ar,imageUrl:”https:\u002F\u002Fs5.\u002Foss\u002F202302\u002F07\u002F862966771f540df82857144db74b27ee5b4b23.jpeg”,navSort:b},{navId:g,navType:b,navName:u,imageUrl:”https:\u002F\u002Fs4.\u002Foss\u002F202302\u002F07\u002Fd53d67c771f5cc42bac359bceb138c4cb1713b.jpg”,navSort:g},{navId:k,navType:b,navName:”技术栈”,imageUrl:”https:\u002F\u002Fs6.\u002Foss\u002F202302\u002F07\u002F58786f9973e5e929ef521783e1ee40413b04de.jpeg”,navSort:k},{navId:i,navType:b,navName:”官微”,imageUrl:”https:\u002F\u002Fs3.\u002Foss\u002F202302\u002F07\u002Fc77c03983d48589b1af789dfc284acb6a7c529.jpeg”,navSort:i},{navId:d,navType:b,navName:as,imageUrl:”https:\u002F\u002Fs4.\u002Foss\u002F202302\u002F07\u002F544d71641d983430fc9955636e625e6bb21ff9.jpeg”,navSort:d},{navId:l,navType:b,navName:at,imageUrl:”https:\u002F\u002Fs3.\u002Foss\u002F202302\u002F07\u002Ff1bd61e720bf669483d941a8486c124f32c451.jpeg”,navSort:l},{navId:m,navType:b,navName:t,imageUrl:”https:\u002F\u002Fs9.\u002Foss\u002F202302\u002F07\u002F4719e7b27bae3af5e33552481b6cb913288b01.jpeg”,navSort:m},{navId:s,navType:b,navName:”鸿蒙开发者社区订阅号”,imageUrl:”https:\u002F\u002Fs5.\u002Foss\u002F202302\u002F07\u002F61a991f484307eed2fe9356cc215c4d8f2dc0f.jpg”,navSort:s},{navId:al,navType:b,navName:”题库小程序”,imageUrl:”https:\u002F\u002Fs9.\u002Foss\u002F202312\u002F22\u002Fd14a8af27ec180578e0921bf0322374996d667.jpeg”,navSort:j}],appQRcodeData:[{navId:j,navType:g,navName:”学堂APP”,imageUrl:”https:\u002F\u002Fs8.\u002Foss\u002F202302\u002F07\u002F24febb8152cc24e264e642f8cb8bb515efea26.jpeg”,navSort:b},{navId:C,navType:g,navName:”学堂企业版APP”,imageUrl:”https:\u002F\u002Fs9.\u002Foss\u002F202302\u002F07\u002F43cca7d0489cc5d1f70060be760bde17d552e2.jpeg”,navSort:g},{navId:ak,navType:g,navName:”鸿蒙开发者社区视频号”,imageUrl:”https:\u002F\u002Fs5.\u002Foss\u002F202302\u002F07\u002Fc4d2220826890472539671d7c428f0c0ee9451.jpg”,navSort:k}],showclass:a},route:{isHost:e,isHostForIndex:e,topic:void 0,firstTopic:a,page:b,type:a,showHtml:e},secondnav:{navList:[{name:ah,has_url:b,has_list:b,url:”https:\u002F\u002Fwww.\u002Fdev”,list:[{name:ag,url:”https:\u002F\u002Fwww.\u002Fdeveloper”},{name:ac,url:”https:\u002F\u002Fwww.\u002Fai”},{name:W,url:”https:\u002F\u002Fwww.\u002Fcloud”},{name:ae,url:”https:\u002F\u002Fwww.\u002Fopensource”},{name:af,url:”https:\u002F\u002Fwww.\u002Fbigdata”},{name:”网络”,url:”https:\u002F\u002Fwww.\u002Fnetwork”},{name:p,url:D},{name:”系统”,url:”https:\u002F\u002Fwww.\u002Fos”},{name:”数据库”,url:”https:\u002F\u002Fwww.\u002Fdatabase”},{name:”物联网”,url:”https:\u002F\u002Fwww.\u002Fiot”},{name:T,url:”https:\u002F\u002Fwww.\u002Fmobile”},{name:”运维”,url:”https:\u002F\u002Fwww.\u002Foperation”},{name:”服务器”,url:”https:\u002F\u002Fserver.”},{name:”存储”,url:”https:\u002F\u002Fwww.\u002Fstor”},{name:”商务办公”,url:”https:\u002F\u002Fwww.\u002Fbiz”},{name:”新闻”,url:”https:\u002F\u002Fwww.\u002Fnews”},{name:”区块链”,url:”https:\u002F\u002Fwww.\u002Fblockchain”},{name:ad,url:”https:\u002F\u002Fwww.\u002Fmetaverse”},{name:au,url:”https:\u002F\u002Fwww.cioage.com”},{name:”数字化转型”,url:”https:\u002F\u002Fwww.\u002Fdigital”},{name:n,url:o},{name:”译文”,url:”https:\u002F\u002Fwww.\u002Ftranslation”},{name:”专题”,url:Y},{name:”企业动态”,url:”https:\u002F\u002Fwww.\u002Fbusiness”},{name:z,url:av}]},{name:”技术博客”,has_url:b,has_list:c,url:A,list:[]},{name:”课程”,has_url:b,has_list:c,url:”http:\u002F\u002Fedu.\u002F?jydh”,list:[]},{name:aq,has_url:b,has_list:c,url:”https:\u002F\u002Fzhibo.?utm_source=shouye”,list:[]},{name:”活动”,has_url:b,has_list:c,url:”https:\u002F\u002Fwww.\u002Factivity”,list:[]},{name:ai,has_url:b,has_list:c,url:aj,list:[]},{name:u,has_url:b,has_list:c,url:”https:\u002F\u002Fost.#zzsy”,list:[]},{name:”企业学习”,has_url:b,has_list:c,url:”https:\u002F\u002Fb.?utm_source=home_sub_menu”,list:[]}]},shence:{is_channel:q,first_channel:p,second_channel:E},sitemap:{workList:[{name:”媒体”,list:[{name:ar,url:”https:\u002F\u002Fwww.\u002F”},{name:au,url:”https:\u002F\u002Fwww.cioage.com\u002F”},{name:”HC3i”,url:”https:\u002F\u002Fwww.hc3i.cn\u002F”},{name:z,url:av}]},{name:”社区”,list:[{name:at,url:A},{name:am,url:an},{name:u,url:”https:\u002F\u002Fost.\u002F”}]},{name:”教育”,list:[{name:as,url:Z},{name:”精培”,url:”https:\u002F\u002Fe.\u002F?utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=sy_topbar&rtm_frd=4″},{name:ao,url:B},{name:t,url:”https:\u002F\u002Fx.\u002Fact\u002Fcto\u002Fcamp”}]}],linkList:[{name:”新浪科技”,url:”https:\u002F\u002Ftech.sina.com.cn\u002F”},{name:”腾讯科技”,url:”https:\u002F\u002Ftech.qq.com\u002F”},{name:”网易科技”,url:”https:\u002F\u002Ftech.163.com\u002F”},{name:”凤凰科技”,url:”https:\u002F\u002Ftech.ifeng.com\u002F”},{name:”驱动科技”,url:”https:\u002F\u002Fwww.mydrivers.com\u002F”},{name:”科技行者”,url:”https:\u002F\u002Fwww.techwalker.com\u002F”},{name:”TechWeb”,url:”http:\u002F\u002Fwww.techweb.com.cn\u002F”},{name:”艾瑞网”,url:”https:\u002F\u002Fwww.iresearch.cn\u002F”},{name:”站长之家”,url:”http:\u002F\u002Fwww.chinaz.com\u002F”},{name:”速途网”,url:”https:\u002F\u002Fwww.sootoo.com\u002F”},{name:”中国经济新闻网”,url:”http:\u002F\u002Fwww.cet.com.cn\u002F”},{name:”IT之家”,url:”https:\u002F\u002Fwww.ithome.com\u002F”},{name:”工联网”,url:”http:\u002F\u002Fwww.iitime.com.cn\u002F”},{name:”极客公园”,url:”https:\u002F\u002Fwww.geekpark.net\u002F”},{name:”236视频会议”,url:”https:\u002F\u002Fwww.263.net\u002F”},{name:”中国IDC圈”,url:”http:\u002F\u002Fwww.idcquan.com\u002F”},{name:”企业网D1Net”,url:”http:\u002F\u002Fwww.d1net.com\u002F”},{name:”投资界”,url:”https:\u002F\u002Fwww.pedaily.cn\u002F”},{name:”次方元”,url:”https:\u002F\u002Fmetafun-space.com\u002F”},{name:”火山引擎”,url:”https:\u002F\u002Fwww.volcengine.com\u002F”}]},topiclist:{topicList:[],total_count:c},user:{islogin:e,user_id:a,avatar:a,nickname:a}},serverRendered:q,routePath:”\u002Farticle\u002F200973.html”,config:{_app:{basePath:aw,assetsPath:aw,cdnURL:”https:\u002F\u002Fs5-media.\u002Fcms\u002Fclient\u002F”}}}}(“”,1,0,5,false,31,2,34,4,9,3,6,7,”原创”,”https:\u002F\u002Fwww.\u002Foriginal”,”安全”,true,779210,8,”CTO训练营”,”鸿蒙开发者社区”,778663,778970,779123,”是中国知名的数字化人才学习平台和技术社区,以服务一亿数字化人才职业成长为己任,对中国数千万数字化人才拥有强大的影响力和服务能力。通过技术社区、技术博客和新媒体矩阵等综合产品服务体系,凝聚了2000万+IT技术人员、50万+位技术博主和近千家IT公司的CTO;通过丰富且高质量的IT技术在线教育资源,完整覆盖就业培训、在职提升、认证考试等职业教育领域,分别打造企业培训、个人提升创新产品矩阵,服务IT人才成长。同时,作为华为鸿蒙操作系统合作伙伴,承担了鸿蒙官方技术社区的运营,全力服务于鸿蒙开发者生态。”,”Techplur”,”https:\u002F\u002Fblog.\u002F”,”https:\u002F\u002Fb.\u002Findex?utm_source=hometop”,10,”https:\u002F\u002Fwww.\u002Fnetsecurity”,”应用安全”,778045,778078,771247,”养成密码管理习惯,保障个人数字安全”,”https:\u002F\u002Fwww.\u002Farticle\u002F779210.html”,533178,779236,778931,59,779068,778959,778806,32,33,”移动开发”,”ibmdw”,”https:\u002F\u002Fso.\u002F?keywords=ibmdw”,”云计算”,”https:\u002F\u002Fwww.”,”https:\u002F\u002Fwww.\u002Fspecials”,”https:\u002F\u002Fedu.\u002F”,”内容中心是优质技术内容的创造和运营平台,始终保持敏锐的技术洞察力,探索IT技术发展趋势,聚焦前沿技术应用场景落地,秉持创新、深度、专业、多元的原则,内容覆盖主流技术方向,以文章、视频、直播、沙龙、大会等不同形式,为技术人员提供优质内容和服务,赋能全球技术人员成长”,”内容中心,技术媒体,在线教育,视频课程,企业培训,鸿蒙社区,开发者社区,资讯,职场,技术博客,软考,认证考试,开发,编程语言,物联网,HarmonyOS,人工智能,大数据,国产化,软件开发,网络,系统,操作系统,运维,安全,存储,数据库,企业解决方案,华为”,”技术编辑,编辑,技术媒体,在线教育,视频课程,企业培训,鸿蒙社区,开发者社区,资讯,职场,技术博客,软考,认证考试,开发,编程语言,物联网,HarmonyOS,人工智能,大数据,国产化,软件开发,网络,系统,操作系统,运维,安全,存储,数据库,企业解决方案,华为”,”技术精选,技术特刊,技术媒体,在线教育,视频课程,企业培训,鸿蒙社区,开发者社区,资讯,职场,技术博客,软考,认证考试,开发,编程语言,物联网,HarmonyOS,人工智能,大数据,国产化,软件开发,网络,系统,操作系统,运维,安全,存储,数据库,企业解决方案,华为”,”人工智能”,”元宇宙”,”开源”,”大数据”,”开发”,”内容精选”,”短视频”,”https:\u002F\u002Fedu.\u002Fvideolist\u002Findex.html?utm_platform=pc&utm_medium=51cto&utm_source=zhuzhan&utm_content=dh”,11,12,”软考资讯”,”https:\u002F\u002Fedu.\u002Frk\u002F”,”企业培训”,”https:\u002F\u002Fx.\u002F?www”,”直播”,””,”学堂”,”博客”,”CIOAge”,”https:\u002F\u002Fwww.\u002Ftechplur”,”\u002F”));</script><script src=”https://s5-media./cms/client/c20ac18.js” defer></script><script src=”https://s5-media./cms/client/6abe5b0.js” defer></script><script src=”https://s5-media./cms/client/8493c0f.js” defer></script><script src=”https://s5-media./cms/client/225882e.js” defer></script><script src=”https://s5-media./cms/client/61470e0.js” defer></script><script src=”https://s5-media./cms/client/72ebbf3.js” defer></script><script src=”https://s5-media./cms/client/4a41083.js” defer></script><script src=”https://s5-media./cms/client/5dfffa7.js” defer></script><script src=”https://s5-media./cms/client/99d5430.js” defer></script><script src=”https://s5-media./cms/client/647d78d.js” defer></script><script src=”https://s5-media./cms/client/5d801f8.js” defer></script><script src=”https://s5-media./cms/client/e8a23bf.js” defer></script><script src=”https://s5-media./cms/client/7777f01.js” defer></script><script src=”https://s5-media./cms/client/f5d01ba.js” defer></script><script src=”https://s5-media./cms/client/d66871f.js” defer></script><script src=”https://s5-media./cms/client/d30e4eb.js” defer></script><script src=”https://s5-media./cms/client/f68aeb7.js” defer></script><script src=”https://s5-media./cms/client/df968ae.js” defer></script><script src=”https://s5-media./cms/client/202011d.js” defer></script><script src=”https://s5-media./cms/client/f39b726.js” defer></script><script src=”https://s5-media./cms/client/381b57b.js” defer></script><script src=”https://s5-media./cms/client/f3e7323.js” defer></script><script src=”https://s5-media./cms/client/ddbbedd.js” defer></script><script src=”https://s5-media./cms/client/e1ad6c9.js” defer></script> </body> </html>

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/131934.html<

(0)
运维的头像运维
上一篇2025-02-26 18:51
下一篇 2025-02-26 18:52

相关推荐

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注