文章目录
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参数的话,也不会产生什么危害。
上面是一些演示的代码
<code class="php7">//没有进行预处理的版本,会被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攻打。
举个例子,就好了解了
比方失常的用户名是张三李四啥的。如果黑客把用户名设置为“<script>while (true) alert(“this is xss”);}</script>”的话,在浏览器显示用户名的时候,会始终死循话弹出输入框。还有更重大的xss脚本能够入侵数据库等。
如果没有富文本编辑器的状况,能够应用转化的思维,用户htmlspecialchars函数,对数据进行转化。能够避免大部分xss攻打。但其实这个函数不能齐全防住xss。