<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>meisw's blog</title>
		<link>http://meisw.wdlinux.cn//</link>
		<description>工作,学习,生活,这里将会有一些记录.     备用域名:http://meisw.wdlinux.cn</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 1.6 Build 20080806</generator>
		<lastBuildDate>Sun, 20 Sep 2026 23:57:13 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://meisw.wdlinux.cn//show-980-1.html</guid>
			<title>基于timestamp和nonce的防止重放攻击方案</title>
			<author>admin</author>
			<description><![CDATA[<p>&nbsp;<span style="color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">以前总是通过timestamp来防止重放攻击，但是这样并不能保证每次请求都是一次性的。今天看到了一篇文章介绍的通过nonce（Number used once）来保证一次有效，感觉两者结合一下，就能达到一个非常好的效果了。</span></p>
<blockquote style="box-sizing: border-box; padding: 15px 20px; margin: 0px 0px 1.7em; border-left: 10px solid rgba(128, 128, 128, 0.075); line-height: 27.2px; background-color: rgba(128, 128, 128, 0.05); border-radius: 0px 5px 5px 0px; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">
<p style="box-sizing: border-box; margin-bottom: 0px; font-size: 1em; line-height: 1.5; color: rgb(111, 111, 111); word-wrap: break-word; word-break: normal;">重放攻击是计算机世界黑客常用的攻击方式之一，所谓重放攻击就是攻击者发送一个目的主机已接收过的包，来达到欺骗系统的目的，主要用于身份认证过程。</p>
</blockquote>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">首先要明确一个事情，重放攻击是二次请求，黑客通过抓包获取到了请求的HTTP报文，然后黑客自己编写了一个类似的HTTP请求，发送给服务器。也就是说服务器处理了两个请求，先处理了正常的HTTP请求，然后又处理了黑客发送的篡改过的HTTP请求。</p>
<h1 id="基于timestamp的方案" style="box-sizing: border-box; margin: 0.8em 0px; font-size: 2.6em; font-family: &quot;microsoft yahei&quot;; font-weight: 100; line-height: 1.1; color: rgb(63, 63, 63); padding: 0px;"><a name="t0" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); margin: 0px; padding: 0px; outline: none;"></a>基于timestamp的方案</h1>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">每次HTTP请求，都需要加上timestamp参数，然后把timestamp和其他参数一起进行数字签名。因为一次正常的HTTP请求，从发出到达服务器一般都不会超过60s，所以服务器收到HTTP请求之后，首先判断时间戳参数与当前时间相比较，是否超过了60s，如果超过了则认为是非法的请求。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">假如黑客通过抓包得到了我们的请求url：&nbsp;<br style="box-sizing: border-box;" />
<a href="http://koastal.site/index/Info?uid=ZX07&amp;stime=1480862753&amp;sign=80b886d71449cb33355d017893720666" target="_blank" style="box-sizing: border-box; background: transparent; color: rgb(202, 12, 22); text-decoration-line: none; margin: 0px; padding: 0px; outline: none;">http://koastal.site/index/Info?uid=ZX07&amp;stime=1480862753&amp;sign=80b886d71449cb33355d017893720666</a>&nbsp;<br style="box-sizing: border-box;" />
其中</p>
<pre class="prettyprint" style="box-sizing: border-box; font-family: &quot;Source Code Pro&quot;, monospace; white-space: nowrap; padding: 5px 5px 5px 60px; margin-top: 0px; margin-bottom: 1.7em; line-height: 23.8px; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word; background-color: rgba(128, 128, 128, 0.05); border: 1px solid rgba(128, 128, 128, 0.075); border-radius: 0px; position: relative; overflow-y: hidden; overflow-x: auto;"><code class="hljs ruby has-numbering" style="box-sizing: border-box; font-family: &quot;Source Code Pro&quot;, monospace; font-size: 12.6px; padding: 0px; color: inherit; white-space: pre; background: transparent; border-radius: 0px; display: block; word-wrap: normal;"><span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$sign</span>=md5(<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$uid</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$token</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$stime</span>); <span class="hljs-regexp" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 136, 0);">//</span> 服务器通过uid从数据库中可读出token</code><ul class="pre-numbering" style="box-sizing: border-box; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 6px; padding-bottom: 40px; list-style: none; line-height: 23.8px; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; border-right: 1px solid rgb(221, 221, 221); text-align: right;"><li style="box-sizing: border-box; margin: 0px; padding: 0px 5px; list-style: none; color: rgb(153, 153, 153);">1</li><li style="box-sizing: border-box; margin: 0px; padding: 0px 5px; list-style: none; color: rgb(153, 153, 153);">2</li></ul></pre>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">一般情况下，黑客从抓包重放请求耗时远远超过了60s，所以此时请求中的stime参数已经失效了。&nbsp;<br style="box-sizing: border-box;" />
如果黑客修改stime参数为当前的时间戳，则sign参数对应的数字签名就会失效，因为黑客不知道token值，没有办法生成新的数字签名。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">但这种方式的漏洞也是显而易见的，如果在60s之后进行重放攻击，那就没办法了，所以这种方式不能保证请求仅一次有效。</p>
<h1 id="基于nonce的方案" style="box-sizing: border-box; margin: 0.8em 0px; font-size: 2.6em; font-family: &quot;microsoft yahei&quot;; font-weight: 100; line-height: 1.1; color: rgb(63, 63, 63); padding: 0px;"><a name="t1" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); margin: 0px; padding: 0px; outline: none;"></a>基于nonce的方案</h1>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">nonce的意思是仅一次有效的随机字符串，要求每次请求时，该参数要保证不同，所以该参数一般与时间戳有关，我们这里为了方便起见，直接使用时间戳的16进制，实际使用时可以加上客户端的ip地址，mac地址等信息做个哈希之后，作为nonce参数。&nbsp;<br style="box-sizing: border-box;" />
我们将每次请求的nonce参数存储到一个&ldquo;集合&rdquo;中，可以json格式存储到数据库或缓存中。&nbsp;<br style="box-sizing: border-box;" />
每次处理HTTP请求时，首先判断该请求的nonce参数是否在该&ldquo;集合&rdquo;中，如果存在则认为是非法请求。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">假如黑客通过抓包得到了我们的请求url：&nbsp;<br style="box-sizing: border-box;" />
<a href="http://koastal.site/index/Info?uid=ZX07&amp;nonce=58442c21&amp;sign=80b886d71449cb33355d017893720666" target="_blank" style="box-sizing: border-box; background: transparent; color: rgb(202, 12, 22); text-decoration-line: none; margin: 0px; padding: 0px; outline: none;">http://koastal.site/index/Info?uid=ZX07&amp;nonce=58442c21&amp;sign=80b886d71449cb33355d017893720666</a></p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">其中</p>
<pre class="prettyprint" style="box-sizing: border-box; font-family: &quot;Source Code Pro&quot;, monospace; white-space: nowrap; padding: 5px 5px 5px 60px; margin-top: 0px; margin-bottom: 1.7em; line-height: 23.8px; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word; background-color: rgba(128, 128, 128, 0.05); border: 1px solid rgba(128, 128, 128, 0.075); border-radius: 0px; position: relative; overflow-y: hidden; overflow-x: auto;"><code class="hljs ruby has-numbering" style="box-sizing: border-box; font-family: &quot;Source Code Pro&quot;, monospace; font-size: 12.6px; padding: 0px; color: inherit; white-space: pre; background: transparent; border-radius: 0px; display: block; word-wrap: normal;"><span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$sign</span>=md5(<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$uid</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$token</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonce</span>); <span class="hljs-regexp" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 136, 0);">//</span> 服务器通过uid从数据库中可读出token</code><ul class="pre-numbering" style="box-sizing: border-box; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 6px; padding-bottom: 40px; list-style: none; line-height: 23.8px; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; border-right: 1px solid rgb(221, 221, 221); text-align: right;"><li style="box-sizing: border-box; margin: 0px; padding: 0px 5px; list-style: none; color: rgb(153, 153, 153);">1</li><li style="box-sizing: border-box; margin: 0px; padding: 0px 5px; list-style: none; color: rgb(153, 153, 153);">2</li></ul></pre>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">nonce参数在首次请求时，已经被存储到了服务器上的&ldquo;集合&rdquo;中，再次发送请求会被识别并拒绝。&nbsp;<br style="box-sizing: border-box;" />
nonce参数作为数字签名的一部分，是无法篡改的，因为黑客不清楚token，所以不能生成新的sign。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">这种方式也有很大的问题，那就是存储nonce参数的&ldquo;集合&rdquo;会越来越大，验证nonce是否存在&ldquo;集合&rdquo;中的耗时会越来越长。我们不能让nonce&ldquo;集合&rdquo;无限大，所以需要定期清理该&ldquo;集合&rdquo;，但是一旦该&ldquo;集合&rdquo;被清理，我们就无法验证被清理了的nonce参数了。也就是说，假设该&ldquo;集合&rdquo;平均1天清理一次的话，我们抓取到的该url，虽然当时无法进行重放攻击，但是我们还是可以每隔一天进行一次重放攻击的。而且存储24小时内，所有请求的&ldquo;nonce&rdquo;参数，也是一笔不小的开销。</p>
<h1 id="基于timestamp和nonce的方案" style="box-sizing: border-box; margin: 0.8em 0px; font-size: 2.6em; font-family: &quot;microsoft yahei&quot;; font-weight: 100; line-height: 1.1; color: rgb(63, 63, 63); padding: 0px;"><a name="t2" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); margin: 0px; padding: 0px; outline: none;"></a>基于timestamp和nonce的方案</h1>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">那我们如果同时使用timestamp和nonce参数呢？&nbsp;<br style="box-sizing: border-box;" />
nonce的一次性可以解决timestamp参数60s的问题，timestamp可以解决nonce参数&ldquo;集合&rdquo;越来越大的问题。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">我们在timestamp方案的基础上，加上nonce参数，因为timstamp参数对于超过60s的请求，都认为非法请求，所以我们只需要存储60s的nonce参数的&ldquo;集合&rdquo;即可。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">假如黑客通过抓包得到了我们的请求url：&nbsp;<br style="box-sizing: border-box;" />
<a href="http://koastal.site/index/Info?uid=ZX07&amp;stime=1480862753&amp;nonce=58442c21&amp;sign=80b886d71449cb33355d017893720666" target="_blank" style="box-sizing: border-box; background: transparent; color: rgb(202, 12, 22); text-decoration-line: none; margin: 0px; padding: 0px; outline: none;">http://koastal.site/index/Info?uid=ZX07&amp;stime=1480862753&amp;nonce=58442c21&amp;sign=80b886d71449cb33355d017893720666</a></p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">其中</p>
<pre class="prettyprint" style="box-sizing: border-box; font-family: &quot;Source Code Pro&quot;, monospace; white-space: nowrap; padding: 5px 5px 5px 60px; margin-top: 0px; margin-bottom: 1.7em; line-height: 23.8px; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word; background-color: rgba(128, 128, 128, 0.05); border: 1px solid rgba(128, 128, 128, 0.075); border-radius: 0px; position: relative; overflow-y: hidden; overflow-x: auto;"><code class="hljs ruby has-numbering" style="box-sizing: border-box; font-family: &quot;Source Code Pro&quot;, monospace; font-size: 12.6px; padding: 0px; color: inherit; white-space: pre; background: transparent; border-radius: 0px; display: block; word-wrap: normal;"><span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$sign</span>=md5(<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$uid</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$token</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$stime</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonce</span>); <span class="hljs-regexp" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 136, 0);">//</span> 服务器通过uid从数据库中可读出token</code><ul class="pre-numbering" style="box-sizing: border-box; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 6px; padding-bottom: 40px; list-style: none; line-height: 23.8px; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; border-right: 1px solid rgb(221, 221, 221); text-align: right;"><li style="box-sizing: border-box; margin: 0px; padding: 0px 5px; list-style: none; color: rgb(153, 153, 153);">1</li><li style="box-sizing: border-box; margin: 0px; padding: 0px 5px; list-style: none; color: rgb(153, 153, 153);">2</li></ul></pre>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">如果在60s内，重放该HTTP请求，因为nonce参数已经在首次请求的时候被记录在服务器的nonce参数&ldquo;集合&rdquo;中，所以会被判断为非法请求。超过60s之后，stime参数就会失效，此时因为黑客不清楚token的值，所以无法重新生成签名。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">综上，我们认为一次正常的HTTP请求发送不会超过60s，在60s之内的重放攻击可以由nonce参数保证，超过60s的重放攻击可以由stime参数保证。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">因为nonce参数只会在60s之内起作用，所以只需要保存60s之内的nonce参数即可。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">我们并不一定要每个60s去清理该nonce参数的集合，只需要在新的nonce到来时，判断nonce集合最后一次修改时间，超过60s的话，就清空该集合，存放新的nonce参数集合。其实nonce参数集合可以存放的时间更久一些，但是最少是60s。</p>
<p style="box-sizing: border-box; margin-bottom: 1.7em; line-height: 27.2px; word-wrap: break-word; word-break: normal; color: rgb(63, 63, 63); font-family: &quot;microsoft yahei&quot;; font-size: 16px;">验证流程</p>
<pre class="prettyprint" style="box-sizing: border-box; font-family: &quot;Source Code Pro&quot;, monospace; white-space: nowrap; padding: 5px 5px 5px 60px; margin-top: 0px; margin-bottom: 1.7em; line-height: 23.8px; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word; background-color: rgba(128, 128, 128, 0.05); border: 1px solid rgba(128, 128, 128, 0.075); border-radius: 0px; position: relative; overflow-y: hidden; overflow-x: auto;"><code class="hljs php has-numbering" style="box-sizing: border-box; font-family: &quot;Source Code Pro&quot;, monospace; font-size: 12.6px; padding: 0px; color: inherit; white-space: pre; background: transparent; border-radius: 0px; display: block; word-wrap: normal;"><span class="hljs-comment" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">//判断stime参数是否有效</span> <span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">if</span>( <span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$now</span> - <span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$stime</span> &gt; <span class="hljs-number" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 102, 102);">60</span>){     <span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">die</span>(<span class="hljs-string" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 136, 0);">&quot;请求超时&quot;</span>); } <span class="hljs-comment" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">//判断nonce参数是否在&ldquo;集合&rdquo;已存在</span> <span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">if</span>( in_array(<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonce</span>,<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonceArray</span>) ){     <span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">die</span>(<span class="hljs-string" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 136, 0);">&quot;请求仅一次有效&quot;</span>); } <span class="hljs-comment" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">//验证数字签名    </span> <span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">if</span> ( <span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$sign</span> != md5(<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$uid</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$token</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$stime</span>.<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonce</span>) ){     <span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">die</span>(<span class="hljs-string" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 136, 0);">&quot;数字签名验证失败&quot;</span>); } <span class="hljs-comment" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">//判断是否需要清理nonce集合</span> <span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">if</span>( <span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$now</span> - <span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonceArray</span>-&gt;lastModifyTime &gt; <span class="hljs-number" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 102, 102);">60</span> ){     <span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonceArray</span> = <span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">null</span>; } <span class="hljs-comment" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">//记录本次请求的nonce参数</span> <span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonceArray</span>.push(<span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">$nonce</span>);   <span class="hljs-comment" style="box-sizing: border-box; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">//开始处理合法的请求</span></code></pre>]]></description>
			<link>http://meisw.wdlinux.cn//show-980-1.html</link>
			<category domain="http://meisw.wdlinux.cn//category-13-1.html">安全相关</category>
			<pubDate>2017-11-11 18:52</pubDate>
		</item>
		<item>
			<guid>http://meisw.wdlinux.cn//show-117-1.html</guid>
			<title>php马</title>
			<author>admin</author>
			<description><![CDATA[<p><font color="#000000">php马当属PhpSpy了,查过几次,都是这个.今天又来一个.目前最新版是2008,更新日期为 2008.1.7</font></p>
<p>检查PHP木马<br />
1 检查最新上传的文件 (ctime -4 最近四天)<br />
2 检查文件属主<br />
3 检查文件大小属性<br />
...</p>
<p>--------</p>
<p>eval(base64_decode(''));</p>
<p>eval(gzinflate(base64_decode(</p>
<p>apa log</p>
<p>?dir|./..|.%2F../..|.%2F..%2F..|</p>
<p>&nbsp;</p>]]></description>
			<link>http://meisw.wdlinux.cn//show-117-1.html</link>
			<category domain="http://meisw.wdlinux.cn//category-13-1.html">安全相关</category>
			<pubDate>2008-04-30 14:19</pubDate>
		</item>
		<item>
			<guid>http://meisw.wdlinux.cn//show-6-1.html</guid>
			<title>2007十大Web安全漏洞 跨站脚本攻击XSS居首</title>
			<author>admin</author>
			<description><![CDATA[<p>安全组织9日发布2007年十大Web安全漏洞，而利用网页及cookies写作漏洞的跨站脚本攻击(XSS)登上首位。</p>
<p>　　开放Web软件安全计划(Open Web Application Security Project,OWASP)台湾分会今发表2007十大Web安全漏洞，年初曾发生在知名文件阅读器Adobe Acrobat Reader上的跨站脚本攻击(Cross Site Scripting,XSS)居首位。</p>
<p>　　而上周疑似使微软英国网站被骇的隐码攻击(Injection Flaw，包括SQL Injection及Command Injection)居次，第三位则是Web应用程序引入外部恶意程序的恶意文件执行攻击(Malicious File Execution)。</p>
<p>　　OWASP台湾分会主席黄耀文在新闻稿中表示，该安全漏洞报告乃经由OWASP的资深安全专家，依Web安全弱点的严重性、与是否易于被黑客采用等依据所选出，作为网站开发人员开发时的安全参考。</p>
<p>　　在Web 2.0流行风潮下，新的网页应用程序开发与相关技术(如AJAX)的应用，成为网站欲出奇致胜的重点，但在网站经营者争相提供创新网页服务的情况下，网页应用程序的安全性也成为新的问题。</p>
<p>　　趋势科技台湾技术顾问简胜财便指出，包括跨站脚本攻击与数据隐码攻击等上榜漏洞，多半都是因网页应用程序写作不当，才产生让黑客得以入侵的漏洞。</p>
<p>　　他认为，网页应用程序开发人员多半缺乏安全相关训练，导致开发出的程序可能存在漏洞，导致黑客得以入侵网页，进而窜改网页、植入恶意程序，或偷取数据，他认为，企业网页开发人员进行网页程序开发时，应更严谨，避免类似事件再次发生。</p>
<p>　　他并以6月底发生在意大利等欧洲国家，万余网站遭入侵的事件为例解释，黑客已可利用特殊工具包(toolkit)，主动搜索网站漏洞，进而入侵、窜改网页内容，甚至造成大规模网灾，提醒网页应用漏洞的普遍性，以及一旦遭黑客利用所可能造成的严重后果。</p>
<p>　　厂商则建议企业采用网页应用防护设备设备来检测网站漏洞。</p>
<p>　　例如阿码科技(Armorize Technologies)即推出网页应用程序原始码检测器CodeSecure Verifier，以自动静态分析(Automated Static Analysis)技术，提供网页应用程序开发人员从开发过程到上线后的开发生命周期的原始程序代码分析。</p>
<p>　　至于NetContinuum、F5与Check Point等厂商，则是推出网页应用防火墙(Web Application Firewall)，或将其功能整并入如UTM等网络安全硬件中，以阻隔针对网页应用而来的攻击的方式，达到保护网页应用安全性的目标。</p>
<p>　　OWASP 2007十大Web安全漏洞第四至第十名分别为：应用程序可任意访问文件的Insecure Direct Object Reference、让合法使用者执行恶意程序指令却可能被允许的Cross-Site Request Forgery(CSRF)、错误信息泄露机密数据的Information Leakage and Improper Error Handling、身份验证功能缺陷的Broken Authentication and Session Management、敏感数据加密不安全或无加密的Insecure Cryptographic Storage、传输数据未加密Insecure Communication，以及因无权限控制导致可直接存取数据的Failure to Restrict URL Access。(马培治)</p>]]></description>
			<link>http://meisw.wdlinux.cn//show-6-1.html</link>
			<category domain="http://meisw.wdlinux.cn//category-13-1.html">安全相关</category>
			<pubDate>2007-07-15 21:32</pubDate>
		</item>
	</channel>
</rss>
