经过多年的工作和站长圈子,我也对安全性有所了解。很多同学拿到安全测试报告以后一脸懵逼的不知道这些缩写字母都是什么意思。如何解决它,今天我向无安全基础的同学讲一讲这三类攻击是如何形成的。在了解了他的原理后,就可以进行防御了。由于每个同学使用的编程语言和框架都有很大不同,本文主要介绍了攻击形成的原理和防御方法,因此具体代码非常少,学生可以根据自己的实际情况编写代码。
什么是CSRF攻击?
让我来谈谈这个词:CSRF(Cross-site request forgery)跨站请求伪造,这个词还是不了解,不用担心,我们先讲一个故事,一个真实的故事。那是在2009年,一名黑客利用CSRF通过Gmail的成功攻击成功窃取了好莱坞明星Vanessa Hudgens的邮箱。攻击很简单,她给她发了一封电子邮件,内容是图片,但这张照片有点特别。它是这样写的:当用户点击邮件加载图片时,他实际上访问了这样的链接:https://mail.google.com/mail?ui = 2&fw = true&fwe = my @ email.com,这个链接的功能是Gmail设置邮件转发,因此目标邮箱中的所有邮件都被转发到黑客指定的邮箱。有很多这样的例子。只需构造正确的Get链接,让浏览器发送Get请求。由于用户已经登录,因此它将携带正确的cookie并直接访问链接以实现相关功能。
在了解了原理之后,如何破解黑客的攻击?解决方案是向表单添加字段标记。黑客无法猜出已经改变的令牌,所以即使你添加一个UUID令牌,将它保存到服务器会话,黑客也不可能猜出随机令牌,就无法构造出能实现功能的链接了。
什么是XSS攻击?
首先,这个词实际上是CSS(Cross Site Scripting),但它与CSS同名。所以名字是XSS。跨站点脚本攻击类似于上面提到的CSRF。实际上,原则是将一段JavaScript代码注入网页。然后当其他用户访问该页面时,他们将运行黑客编写的JS代码来实现一些帐户控制。经典故事是:2011年6月28日,新浪微博被XSS攻击,大量用户自动转发微博、私信。自动关注用户,大量用户被莫名其妙地控制。因为可以使用JS代码代替用户单击按钮发送请求,所以损坏非常大。反射XSS攻击:搜索模块越常见,例如:https://www.lucklnk.com/Search?wd =攻击,当搜索链接正常时,应将wd参数传递给搜索词,并且然后在页面上显示当前搜索词,您可以使用此门户传递一些不同的数据,例如,我将其更改为:https://www.lucklnk.com/Search?wd =,页面将是使用JS代码注入类似地,也可以在没有用户感知的情况下在站点中插入其他站点的js文件,从而实现诸如控制用户和窃取cookie之类的操作,但是这样的链接必须由用户点击,并且将不要让所有用户都被招募。
存储XSS攻击:最后一次反射XSS攻击只能攻击点击该链接的某些用户。存储类型XSS可能会对所有用户带来攻击。经典的是用户签名栏。这个地方允许用户自定义。内容将存储在数据库中。当其他用户浏览他时,它将从数据库加载。如果恶意用户在其签名栏中注入了js参考,那么浏览他的所有人都将被Js控制,存储类型XSS的危险可能危及整个站的用户,非常危险。
XSS攻击 XSS攻击 在了解了原理之后,如何破解黑客的攻击?有很多方法,例如:关键字判断当有一个关键字如脚本、src来代替损坏;返回内容时进行转码,转码尖括号采用Unicode编码格式,如下面的截图:
Unicode编码格式
什么是SQL注入攻击?
SQL注入是一个非常古老的漏洞,现在并不常见。经验不足的人可以避免被SQL注入的风险。让我们首先看一个经典案例:用户经常在登录时写字。
$sql = "select * from user where username = '" + userName "'' and passwd = '" +userPassword + "'";
在正常情况下会说明:select * from user where username ='admin' and passwd ='mima',但不幸的是黑客也会编写SQL语句,黑客在输入时输入用户名和密码:user named admin' or 1 = 1 - ,密码为空,此时拼接出的SQL是:从用户中选择*,其中username ='admin' or 1 = 1 - ' and passwd =''
你看到了什么? 1 = 1总是成立,后者 - 将注释掉以下SQL,admin用户将成功登录,原理就是这么简单。
在了解了原理之后,如何破解黑客的注入攻击?最常见的是在业务逻辑层中执行关键字检查。如果包含SQL的关键字,例如 *、or、select、delete等等关键字就进行替换;最有效的仍然是使用SQL变量进行查询,避免使用字符串来拼接SQL字符串。