文章目录1.了解web攻击的危害。二、分享三种常见的攻击方式及相应的防御方法1、Web攻击的危害。网络攻击有什么危害?较小的攻击可能会从您的网站窃取用户信息。严重的网络攻击可以删除数据库、瘫痪网站等严重危害。2、分享攻击类型:sql注入、xss、csrf攻击这里介绍三种攻击类型:sql注入、XSS攻击、csrf攻击2.1sql注入什么是sql注入?本来,用户传递了一个id参数。如果我们不去阻止,就会发生sql注入。例如。用户传递一个uid参数(用户id),一般情况下会出现,会传递一个整数,例如:1$uid=$_GET['uid'];//1select*frommemberwhereid=$uid这个sql没问题。如果黑客故意穿uid='1or1=1',那么select*frommemberwhereid=1or1=1;会找出所有用户的信息。这里是一个简短的答案来举个例子。事实上,sql注入会导致更严重的问题。这里有两个防御措施:1.改造思路:严格过滤用户提交的参数。比如对于uid参数,我们进行整形转换。$uid=intval($_GET['uid']);//1或1=1会转为1,在框架中使用框架封装的方法进行查询。不要自己编写原生语句查询。框架底层会自动过滤参数,防止SQL注入。如果某些场景需要写native语句,就必须自己过滤参数。2、利用mysql的预处理机制(也叫参数化查询)。其实sql注入的根本问题是mysql在执行语句的时候,执行完一条sql就直接返回数据。这样只要sql出现问题,就会出现sql注入。如果把两者分开。1.而且,一条有sql注入的sql语句经过预处理后会被拆分成两条没有sql注入的语句。2.你也可以有机会逃脱mysql校验。比如执行完第一个预处理sql(`id`=:ThinkBind_1_454319113_),mysql就会知道你查的是id字段,所以你第二个sql的数据一定是数字。如果不是数字,mysql会抛出异常。下面以thinkphp为例。这样就把有问题的sql拆分成了两条sql分别执行,这样就不会出现sql注入的问题。例如:SELECTid,nameFROMuf_memberWHEREid=12052or1=1//拆分为第一项:SELECT`id`,`name`FROM`uf_member`WHERE`id`=:ThinkBind_1_454319113_执行第一项后,mysql会等待你的参数传入,这时候传入第二条sql(一些参数)//第二条:array(1){["ThinkBind_1_454319113_"]=>array(2){[0]=>string(14)"12052or1=1"[1]=>int(1)}即使存在sql注入问题,单独运行这个sql参数也不会有任何危害。这是一些预处理演示代码header('content-type:text/html;charset=utf-8');$username=$_POST['username'];$psw=$_POST['psw'];尝试{$pdo=newPDO('mysql:host=localhost;dbname=test','root','root');$sql="select*fromuserwhereusername=?andpassword=?";$stmt=$pdo->准备($sql);$stmt->执行(数组($用户名,$psw));echo$stmt->rowCount();}catch(Exception$e){echo$e->getMessage();}2.2XSS(CrossSiteScripting)缩写为CSS,但是这会和CascadingStyleSheets(CSS)的缩写混淆。因此一般称为跨站脚本攻击,简称XSS。类似于sql注入,相当于html注入。将脚本注入到提交给服务器的html中。XSS(CrossSiteScripting)中文名称为:跨站脚本攻击。XSS的重点不是跨站,而是脚本执行。那么XSS的原理就是:恶意的攻击者会在网页中插入一些恶意的脚本代码。当用户浏览页面时,会执行嵌入在网页中的脚本代码,从而达到恶意攻击用户的目的。那么XSS攻击主要分为以下几类:反射型、存储型、DOM-based型。反射和基于DOM的类型可以归类为非持久性XSS攻击。存储类型可以归类为持久性XSS攻击。例如,它很容易理解。比如正常的用户名是张三李四什么的。如果黑客将用户名设置为“”,当浏览器显示用户名时,会一直弹出输入框。还有比较严重的xss脚本,可以入侵数据库等,防御思路主要有两种:改造和过滤。如果没有富文本编辑器,可以使用转换的思路,用户htmlspecialchars函数,对数据进行转换。可以防止大部分xss攻击。但实际上这个功能并不能完全防止xss。如果用户提交的数据有富文本编辑器,包含html标签是正常的,此时不能使用改造的思路。应该使用过滤的思想。此时,我们可以使用htmlpurifier(第三方包)的remove_xss功能。composerrequireezyang/htmlpurifier富文本编辑器内容,使用过滤的思想进行处理。2.3csrf攻击(CSRF(Cross-siterequestforgery),中文名:跨站请求伪造)什么是csrf攻击?请参见下图中的顺序。1,2,3,4例如上图中的招商银行网站,收到了钓鱼网站的表单请求。事实上,该请求并非来自招行网站,而是用户受钓鱼网站诱导,在钓鱼网站输入相应的账户密码,并携带此类账户信息向真实的招行请求发出请求。如果没有预防措施,这笔钱将被盗用。注意事项:我们为每张表格填写一个唯一标识符。一般的方法是为表单生成一个唯一的令牌。在laravel框架中,Laravel提供了一个全局的辅助函数csrf_token来获取Token值,所以只需要在视图提交表单中添加如下HTML代码即可在请求中带上Token:
