文章目录

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攻打。

举个例子,就好了解了
比方失常的用户名是张三李四啥的。如果黑客把用户名设置为“<script>while (true) alert("this is xss");}</script>”的话,在浏览器显示用户名的时候,会始终死循话弹出输入框。还有更重大的xss脚本能够入侵数据库等。

如果没有富文本编辑器的状况,能够应用转化的思维,用户htmlspecialchars函数,对数据进行转化。能够避免大部分xss攻打。但其实这个函数不能齐全防住xss。