打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
9

一、考点聚焦

常见的web安全问题,原理和防范措施。安全意识
1.SQL注入
2.XSS(跨站脚本攻击,Cross-Site Scripting)
3.CSRF(跨站请求伪造,Cross-Site request forgery)

二、什么是SQL注入?

SQL注入与防范
1.通过构造特殊的输入参数传入web应用,导致后端执行了恶意SQL
2.通常由于程序员未对输入进行过滤,直接动态拼接SQL产生
3.可以使用开源工具sqlmapSQLninia检测

代码演示:

创建数据库并插入数据

CREATE TABLE `users`(
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`email` VARCHAR(45) NULL,
`password` VARCHAR(45) NULL,
PRIMARY KEY (`id`)
);

insert into users(name, email, password) values ('laowang', 'laowang@qq.com', md5('laowang123'));
insert into users(name, email, password) values ('zhangsan', 'zhangsan@qq.com', md5('zhangsan123'));
insert into users(name, email, password) values ('lisi', 'lisi@qq.com', md5('lisi123'));

生成数据库表和数据如下 :

sql 注入演示代码

import os
import MySQLdb   # pip install mysqlclient

db = MySQLdb.connect(
host='localhost',
user='root',
password=os.getenv('MYSQL_PASS'),
db='test'
)

cur = db.cursor()

name = input('Enter name: ')
print(f'您输入的用户 name 是:{name}')
password = input('Enter password: ')
print(f'您输入的密码是:{password}')

# 直接拼接 sql 参数
sql = " SELECT * FROM users WHERE name='" + name + "'" + " AND password=md5('" + password + "')"   # 有 sql 注入危险的语句
sql = "SELECT * FROM users WHERE name=%s and password=md5(%s)"   # 用占位符,防止 sql 注入
print(sql)
cur.execute(sql)   # 没用点位符时的执行
cur.execute(sql, (name, password))   # 用占位符时的执行,代码会在底层做一个转义操作,可以防止 sql 注入
for row in cur.fetchall():
print(row)

db.close()

正常的运行过程:


sql注入的运行过程:
这里的密码随便输入,还是输出了查询结果,是sql注入

如何防范SQL注入?
web安全一大原则:永远不要相信用户的任何输入
1.对输入参数做好检查(类型和范围);过滤和转义特殊字符
2.不要直接拼接sql,使用 ORM可以大大降低sql注入风险
3.数据库层:做好权限管理配置;为要明文存储大敏感信息

三、什么是XSS?

XSS(Cross Site Scripting),跨站脚本攻击
1.恶意用户将代码植入到提供给其他用户使用的页面中,未经转义的恶意代码输出到其他用户的浏览器被执行
2.用户浏览页面的时候嵌入页面中的脚本(js)会被执行,攻击用户。
3.主要分为两类:反射型(非持久型,一般会把脚本放url参数里),存储型(持久型,一般会让脚本存储到网站数据库中)

XXS危害:

xss可以利用js实现很多危害巨大的操作
1.盗用用户 cookie,获取敏感信息
2.利用用户私人账号执行一些违法操作,比如盗取个人或者商业资料,执行一些隐私操作
3.甚至可以在一些访问量很大的网站上实现DDos攻击

如何防范XSS
不要相信用户的任何输入:
1.过滤(输入和参数)。对敏感标签<script> <img> <a>等进行过滤
2.转义。对常见符号("&", “<”, and “>”)转义(python3 html.escape
3.设置HttpOnly禁止浏览器访问和操作Document.cookie

转义代码示例:

import html

new_html = html.escape('script>')
print(new_html)   #  <script>

old_html = html.unescape(new_html)
print(old_html)   # <script>

四、什么是CSRF?

CSRFCross-site request forgery(跨站请求伪造)
1.利用网站对已认证用户的权限去执行未授权的命令的一种恶意攻击
2.攻击者会盗用你的登录信息,以你的身份模拟发送请求
3.web身份认证机制只能识别一个请求是否来自某个用户的浏览器,但是无法保证请求是用户自己或者批准发送的


CSRF产生条件:
要完成一个CSRF攻击,需要具备两个条件
1.受害者已经登录到了目标网站并且没有退出(保持登录状态)
2.受害者访问了攻击者发布的链接或者表单
3.二者必须缺一不可。

如何防范CSRF
不要在GET请求里有任何数据修改操作
1.令牌同步(Synchronizer token pattern,简称STP):在用户请求的表单中嵌入一个隐藏的csrf_token,服务端验证其是否与cookie中的一致(基于同源策略其他网站是无法获取cookiecsrf_token,前提是网站本身没有XSS漏洞)
2.如果是js提交需要先从cookie获取csrf_token作为X-CSRFToken请求头提交
3.其他:检测来源HTTP Referer(容易被伪造);验证码方式(安全但是繁琐)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python后端技术栈(七)--web框架
常见 Web 安全攻防总结
php安全专题
看看有哪些 Web 攻击技术.
关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
XSS跨站脚本攻击问题和原理详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服