总结常见web安全问题(分享常见的12攻击类型与防御措施)第一篇

文章目录
1.明白web攻击的危害。
2.分享常见的3种攻击与对应的防御方法
1.web攻击的危害。 web攻击有什么危害呢?
程度较轻微的攻击,或许会从你的网站上窃取到用户的信息。严重的web攻击可以删库,让网站瘫痪等等严重危害。
2.分享攻击类型:sql注入,xss,csrf攻击 在此先分享3种攻击类型:sql注入,XSS攻击,csrf攻击
2.1 sql注入
什么是sql注入?
本来用户传了个id参数过来。如果我们没有预防的话,产生sql注入。
举个例子。用户传了个uid参数(用户id),一般情况下就会出现,会传一个整数,比如:1
$uid = $_GET['uid']; //1
select * from member where id = $uid
这个sql没问题。
如果黑客故意穿uid = '1 or 1=1'
那么select * from member where id = 1 or 1=1;
就会查出所有用户的信息。这里简答举个例子,其实sql注入狠一点的还能造成更严重的问题。
在此分享两个防御措施
1.转化思路:对用户的提交的参数进行严格的过滤。
比如uid参数,我们进行整形转化。$uid = intval($_GET['uid']); //1 or 1=1会转化为1。
框架中,用框架封装好的方法查询。不要自己写原生语句查询。框架底层会自动过滤参数,可以防止sql注入。如果有些场景要自己写原生语句时,自己一定要过滤好参数。
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注入的问题。

比如:SELECT id,name FROM uf_member WHERE id = 12052 or 1 = 1
//拆成第一条: SELECT `id`,`name` FROM `uf_member` WHERE`id` = :ThinkBind_1_454319113_

执行完第一条后,mysql会等待你参数的传入。 此时传入第二条sql(是一些参数)
//第二条: array(1) { ["ThinkBind_1_454319113_"]=> array(2) { [0]=> string(14) "12052 or 1 = 1" [1]=> int(1) }

即使是有sql注入问题,单独运行这条sql参数的话,也不会产生什么危害。
下面是一些演示的代码
//没有进行预处理的版本,会被sql注入 header('content-type:text/html; charset=utf-8'); $username=$_POST['username']; $psw=$_POST['psw']; try { $pdo=new PDO('mysql:host=localhost; dbname=test','root','root'); $sql="select * from user where username='{$username}' and password='{$psw}'"; $stmt=$pdo->query($sql); //返回结果集中的行数echo $stmt->rowCount(); } catch (Exception $e) { echo $e->getMessage(); }//进行了预处理,可以防止sql注入 header('content-type:text/html; charset=utf-8'); $username=$_POST['username']; $psw=$_POST['psw']; try { $pdo=new PDO('mysql:host=localhost; dbname=test','root','root'); $sql="select * from user where username=? and password=?"; $stmt=$pdo->prepare($sql); $stmt->execute(array($username,$psw)); echo $stmt->rowCount(); } catch (Exception $e) { echo $e->getMessage(); }

2.2 XSS(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。所以一般称把跨站脚本攻击缩写为XSS。
类似于sql注入,相当于html注入。在提交给服务器的html中,注入一段脚本。
XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。
那么XSS的原理是:恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。
举个例子,就好理解了
比如正常的用户名是张三李四啥的。如果黑客把用户名设置为“”的话,在浏览器显示用户名的时候,会一直死循话弹出输入框。还有更严重的xss脚本可以入侵数据库等。
【总结常见web安全问题(分享常见的12攻击类型与防御措施)第一篇】如果没有富文本编辑器的情况,可以使用转化的思想,用户htmlspecialchars函数,对数据进行转化。可以防止大部分xss攻击。但其实这个函数不能完全防住xss。

    推荐阅读