常见的网站安全问题
<p>尽管你的网站用了很多高大上的技术,但是如果网站的安全性不足,无法保护网站的数据,甚至成为恶意程序的寄生温床,那前面堆砌了再多的美好也都成了枉然。</p>
<p>
<img title="常见的网站安全问题" alt="常见的网站安全问题" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/868370e75b278736b0902b1b2eb1d950.jpg" width="auto"></p>
<p>
<strong>SQL注入</strong></p>
<p>
在众多安全性漏洞中,SQL 注入绝对是最严重但也是最好处理的一种安全漏洞。在数据库执行查询句时,如果将恶意用户给出的参数直接拼接在查询句上,就有可能发生。</p>
<p>
举个例子,假设原本某网站登录验证的查询句长这样:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>strSQL = </span><span class="string">"SELECT * FROM users WHERE (name = '"</span><span> + userName + </span><span class="string">"') and (pw = '"</span><span>+ </span><span class="keyword">passWord</span><span> +</span><span class="string">"');"</span><span> </span></span>
</li>
</ol>
<p>
而恶意用户输入的参数为:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>userName = </span><span class="string">"1' OR '1'='1"</span><span>; </span></span>
</li>
<li>
<span><span class="keyword">passWord</span><span> = </span><span class="string">"1' OR '1'='1"</span><span>; </span></span>
</li>
</ol>
<p>
由于代码中是直接将参数与查询句做字串做的拼接,所以 SQL 就成为了这样:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>strSQL = </span><span class="string">"SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"</span><span> </span></span>
</li>
<li>
<span>// 相当于 </span>
</li>
<li class="alt">
<span>strSQL = <span class="string">"SELECT * FROM users;"</span><span> </span></span>
</li>
</ol>
<p>
这样一来,账号密码就形同虚设,甚至可以拿到整个数据库的结构(SELECT * FROM sys.tables)、任意修改、查询数据,整个网站的数据就全部泄露了。</p>
<p>
<img title="常见的网站安全问题" alt="常见的网站安全问题" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/b8a992b9189c9c25366b4c2aac4ff88c.jpg" width="auto"></p>
<p>
不过解决方法也很简单,只要通过参数化查询来避免直接将参数与查询句拼接,并进行适当的输入检查、插入转义字符、严格设定程序权限,就能够有效避免 SQL 注入了。</p>
<p>
<strong>XSS</strong></p>
<p>
XSS(跨站攻击)也叫JavaScript 注入,是现代网站最频繁出现的问题之一,它指的是网站被恶意用户植入了其他代码,通常发生在网站将用户输入的内容直接放到网站内容时。例如论坛、留言板等可以输入任意文字的网站,恶意用户如果写入一小段可以跨域的特性直接使用浏览器用户的 Cookie;攻击者只需要在网页上通过 </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span></span>
</li>
</ol>
<p>
看起来很恐怖,那么该如何解决呢?除了前面所说的 CSRF Token 外,许多大公司还采用了另一种有趣的解决方式。即 API 的响应内容开头为 for (;;);,这也是利用 了<script> 引入的 JavaScript 会立即执行的特性,把攻击者的网站卡死在循环里。</p>
<p>
<strong>总结</strong></p>
<p>
除了文中提到的四种常见的网站安全漏洞外,一个网站还有很多细节需要考虑,例如不要用明码存储密码等敏感信息,针对来源 IP 做流量限制防止 DOS 等等。所以在进行网站开发时要保持安全意识,尽可能做好基本的防护措施。</p>
<p>
原文链接:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMDY0NA==&mid=2247503874&idx=1&sn=9f23e3f5e29cd12f167ddd4f7462cb71&chksm=eb6bf559dc1c7c4f1ef8efab781c34df153076ac22988e3ea778d31b60ffd72f8525f6e357f1&mpshare=1&</p>
頁:
[1]