<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[刘新修]]></title> 
<link>http://pic1.liuxinxiu.com:80/index.php</link> 
<description><![CDATA[刘新修的个人博客 (Liuxinxiu'S Blog)]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[刘新修]]></copyright>
<item>
<link>http://pic1.liuxinxiu.com:80/s//</link>
<title><![CDATA[快速对字符转义，避免跨站攻击XSS]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[H5/JS/CSS]]></category>
<pubDate>Fri, 22 May 2020 10:45:48 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s//</guid> 
<description>
<![CDATA[ 
	<p>XSS已经成为非常流行的网站攻击方式，为了安全起见，尽量避免用户的输入。可是有些情况下不仅不避免，反而要求鼓励输入，比如写博客。博客园开放性很高，可以运行手写的JS。之前比较著名的例子就是，凡是看到某一篇文章的，都自动关注他。</p><p>如果避免跨站攻击的话，我们就得对用户的输入，进行转义。例如&lt;script type='text/javascript'&gt;alert('hello world')&lt;/script&gt;。如果直接保存这个字符串的话，然后再输出的话，就会运行JS了。我们需要将这个字符串转义成&quot;&amp;lt;script type='text/javascript'&amp;gt;alert('hello world')&amp;lt;/script&amp;gt;&quot;。</p><p>转义，就是一个个字符的匹配，然后转换。看着不难，但是需要转义的字符也不少。另外当字符数量大的时候，效率成为一个问题。下面我写一个函数，让浏览器底层帮我们做到。</p><div class="codeText"><div class="codeHead">JavaScript代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="keyword">function</span><span>&nbsp;stringEncode(str)&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;div=document.createElement(</span><span class="string">'div'</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(div.innerText)&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div.innerText=str;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<span class="keyword">else</span><span>&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div.textContent=str;<span class="comment">//Support&nbsp;firefox</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;div.innerHTML;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125; &nbsp;</span></li></ol></div>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s//#blogcomment</link>
<title><![CDATA[[评论] 快速对字符转义，避免跨站攻击XSS]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>