大家好,又见面了,我是你们的朋友全栈君。
web安全的概念太过于宽泛,博主自知了解的并不多,还需要继续学习。但是又想给今天的学习进行总结,所以今天特分享一篇关于web安全的文章,希望对初次遇到web安全问题的同学提供帮助。
SQL注入
- 数据库表
- 出现场景
当开发登录模块的时候,如果我们使用是mysql
操作php
,并非使用mysqli
、PDO
等;当查询用户是否存在的SQL是这样写的,select * from user where name = 'admin' and password = '123456';
这样写是以查询来的,但是会出现漏洞。居心叵测的人就可以使用万能密码xxx ' or 1 #
来破解上面的登录操作。
- SQL注入原理
用户在输入用户名的时候直接输入万能密码:xxx' or 1 #
,那么最后拼接的SQL会变为:select * from user where name = 'xxx' or 1 # and password = '123456';
#符号代表SQL语法中的注释,上面的SQL就如同select * from user where name = 'xxx' or 1
。这样是可以查询到用户信息的,所以用户就登录了系统。
- 如何防范
1、过滤非法字符:保证传来的字符串作为一个参数,而不是语句拼接的一部分。所以需要对特殊字符进行转义,可以使用addslashes函数,我们可以给_GET、_POST、
封装函数
其次,在初始化文件中,使用以下代码
2、确保正确的数据类型:判断url或表单中传来的数据是否为想要的数据类型,如果不是,进行相应的数据类型转换。如使用方法intval()
提取变量中的整数值;如果参数错误,可以提示用户非法操作!
3、使用正则表达式:设置用户的输入规则,限制用户不安规则瞎输
4、使用预处理而不是拼接SQL语句:在上文我说过,使用mysql操作数据库会出现漏洞,避免出现这样的问题,可以使用mysqli、PDO来操作数据库。因为它们两都是将SQL预处理的,然后放入参数。
密码安全
假如某网站数据库泄露,那么用户信息就被一览无余了,如果这是用户的常用密码,那么坏人拿到密码就可以进行撞库操作,那么你买的12306的票就会被坏人退了。以前csdn和天涯就是使用明文来存储密码的,之后就出现的泄露事件。
- md5加密
md5是一种加密算法,是不可逆的算法。我们可以将密码使用md5加密后进行存储。那么在判断的时候,需要将用户输入的数据加密再和表中的数据相对比。
注:在php和mysql中都有md5函数。
- md5的不安全性
上文说了要采用md5加密,怎么又不安全。网上有网站是在线md5解密的,他们是怎么解密的呢?因为他们一直在收集简单密码的md5值,形成越来越大的库。所以,如果密码是简单的纯数字,那么生成的md5值可能会被该网站解密。所以我们应该尽量把密码设置得难一些。
- md5加盐
什么是md5加盐?在存储密码的时候,我们可以将真实的密码+“盐”之后再进行md5加密。“盐”可以是一个字符串(无规律),也可以是一个字段,比如说是姓名字段,也可是是单独的字段。 在判断用户是否存在的时候,我们先将输入的密码+“盐”,然后md5加密,在和数据库中的密码字段进行匹配。这样做会安全一些。
cookie安全
在某网站中,如果用户登录之后,如果使用的是cookie来存储用户的信息,然后是通过检测是否有这个cookie值来检测是否登录的。那么可能会出现cookie的安全问题。
- 出现的原因
当用户登录以后,在浏览器中会出现cookie
的值,形如上图,cookie
的键是name
,值是admin
。如果网站是根据是否有这个cookie
值来检测,形如上面代码,那么坏人就可以使用火狐浏览器中的firebug
工具来伪造cookie
,如上图。我只是伪造了一个cookie
,名称也是name
,但是内容我却可以随便输入,此时便会伪造一个cookie
,那么以后带着这个cookie
去访问的时候其他页面是,就不会被代码拦截了。
- 解决方式
在登录成功时,除了只设置name
项之外,我们可以多设置一项,但是这一项的值必须是随机的,没有任何规律可循的。下面的代码我是先定义了一个盐的变量,然后把登录后的用户名+盐的方式再进行md5
加密,再定义一个cookie项。然后修改判断用户是否登录的代码。
xss攻击
- 案列 在从事项目开发中,经常会碰到评论功能,如果我们将评论的内容直接存到表中,那么显示的时候就可能被用户输入的东西进行攻击。
1、恶作剧:
2、略带恶意: 这样就会无限的弹出对话框了,这个网站就挂了,除非把改评论删除
3、恶意 读取你的cookie信息,并发送到指定的页面,进行保存操作。
获取cookie的信息
评论的内容
toucookie.php中的内容
cookie.txt的内容
- 防范xss
1、不需要展示HTML标签的表单内容,入库时直接转成实体显示
2、可以用正则检测输入框必须为email等合法数据
3、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等 如strip_tags
来过滤html标签
4、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等 如strip_tags 来过滤html标签
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125335.html原文链接:https://javaforall.cn
原文链接:https://cloud.tencent.com/developer/article/2054261
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/17829