一、csrf跨站请求伪造(Cross-site request forgery)

CSRF的攻击原理:简单说就是利用了高权限帐号(如管理员)的登录状态或者授权状态去做一些后台操作,但实际这些状态并没有被我们直接获取到(获取那是XSS干的事)。

CSRF能够攻击的根本原因是:服务器无法识别你的来源是否可靠。

防御CSRF攻击:服务端验证请求的token一致性

CSRF攻击的核心原理就是利用用户验证信息储存cookie中,发送请求,使得服务器无法判断真伪,而token之所以能够拦截,就是因为它是CSRF攻击过程中几乎不可能伪造的东西。

django项目setting.py里的中间件django.middleware.csrf.CsrfViewMiddleware,再配合模板里的表单以post方式提交时添加的{% csrf_token %}就是采用此原理实现。但是有的项目采用前后端分离,就需要后端手动生成token发送给前端。

关于生成token:可以参考https://www.cnblogs.com/hooo-1102/p/12048232.html

二、xss跨站脚本攻击(Cross Site Scripting)

xss的攻击原理:通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌

下面举个栗子,比较简单:

前端:

后端:

    json_str = request.body
if not json_str:
result = {'code':302, 'error': 'Please give me data'}
return JsonResponse(result) json_obj = json.loads(json_str) title = json_obj.get('title') if not title:
result = {'code':303, 'error': 'Please give me title !!'}
return JsonResponse(result)
#防止xss cross site script 攻击
title = html.escape(title)

对前端传过来的title进行了html.excape()处理,可以对相应的字符进行转义,标题下面的大文本框是第三方的,应该做了相应的处理,不需要我们再进行转义

三、sql注入

所谓SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串(注入本质上就是把输入的字符串变成可执行的程序语句),最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。在Web应用漏洞中,SQL Injection 漏洞的风险要高过其他所有的漏洞。

举个栗子:

前端就是一个简单的登录表单,

后端

from django.shortcuts import render, HttpResponse, redirect
from django.views.generic.base import View class LoginNotSafeView(View):
def get(self, request):
return render(request, 'login.html')
def post(self, request):
user_name = request.POST.get("username", "")
pass_word = request.POST.get("password", "") import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='mxonline',charset='utf8' )
cursor = conn.cursor()
# 黑客可通过user或者password输入数据库语句对数据非法利用
sql_select = " select * from users_userprofile where username='{0}' and passworf='{1}' ".format(user_name, pass_word)
result = cursor.execute(sql_select)
for i in cursor.fetchall():
# 数据库所有查询结果
pass

如果在前端的username框中填写admin,password为123,

上面

sql_select = " select * from users_userprofile where username='{0}' and passworf='{1}'

相当于

select * from users_userprofile where username=admin and passworf=123

但是如果在前端username框中填写admin or admin=admin #,password为123

现在就成这样了:

select * from users_userprofile where username=admin or admin = admin # and passworf=123

这里的#相当于把后面的所有查询包括password查询给注释,并且

or admin = admin

的查询永远是正确的,所以sql攻击注入就完成了

防御sql注入攻击:

  使用Django自带的数据库API

  对用户的输入进行校验,可以通过正则表达式限制长度;对单引号和双"-"进行转换等。

  不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

  不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

Django csrf,xss,sql注入的更多相关文章

  1. csrf xss sql注入

    1.输入框 sql注入 测试直接在输入框输入1' ,看sql会不会拼接出错 xss攻击 csrf攻击 测试直接在输入框输入 <script>alert(123)</script> ...

  2. Django中的sql注入

    Django中防止SQL注入的方法 方案一总是使用Django自带的数据库API.它会根据你所使用的数据库服务器(例如PostSQL或者MySQL)的转换规则,自动转义特殊的SQL参数.这被运用到了整 ...

  3. Web站点如何防范XSS、CSRF、SQL注入攻击

    XSS跨站脚本攻击 XSS跨站脚本攻击指攻击者在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的,比如获取用户的Cookie,导 ...

  4. Web安全XSS、CSRF和SQL注入

    SQL注入 SQL注入是以用户的输入作为sql语句的一部分,如后端接收到用户的请求数据后,不经过数据转义,就把数据拼接到SQL中执行,容易导致SQL的语义被篡改,即受到攻击了. 解决办法是对接收的数据 ...

  5. 安全漏洞XSS、CSRF、SQL注入以及DDOS攻击

    随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,下面列举一些常见的安全漏洞和对应的防御措施. 0x01: XSS漏洞 1.XSS简介 跨站脚本(cross site s ...

  6. 程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)

    https://blog.csdn.net/ChenRui_yz/article/details/86489067 随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,下面 ...

  7. django中安全sql注入等

    模拟sql注入 使用原生sql语句编写login登录逻辑 class LoginUnsafeView(View): def get(self, request): return render(requ ...

  8. Django JSONField/HStoreField SQL注入漏洞(CVE-2019-14234)

    复现 访问http://192.168.49.2:8000/admin 输入用户名admin ,密码a123123123 然后构造URL进行查询,payload: http://192.168.49. ...

  9. 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击

    第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...

随机推荐

  1. Java解析XML介绍

    开发十年,就只剩下这套架构体系了! >>>   XML解析器提供了访问或修改用来表示数据的xml文件的能力.Java中提供了多种方式来解析xml文件. 主要分为两类,包括解析XML文 ...

  2. HTML导航框架实现

    导航栏界面(html_contents.html) <!DOCTYPE html> <html> <head> <meta charset=” utf-8” ...

  3. meter标签度量衡如何改变颜色

    此文章为转载,目的为了方便整理学习笔记. 在meter中要想改变颜色,需要用到五个值,分别是:min(最小值).max(最大值).low.high.value和optimum,其中前四个值会把整个进度 ...

  4. Groovy基本语法

    官方文档 注释(Comments) 和Java一样,支持单行(使用//).多行(/* */)和文档注释(使用/** */). Shebang line UNIX系统支持一种特殊的单行注释叫作Sheba ...

  5. Linux用户都应该了解的命令行省时技巧

    每个Linux用户都应该了解的命令行省时技巧 有网友在问答网站Quora上提问:“有哪些省时小技巧,是每个Linux用户都应该知道的?” Joshua Levy 平常就在 Linux 平台工作,并且他 ...

  6. 线上nginx 平滑添加新模块;如(--with-http_realip_module)

    nginx 添加模块1.查看当前nginx信息(配置文件路径,启动用户...) ps aux | grep nginx 2.查看当前nginx已启用的模块(记录模块信息,安装路径)./nginx -V ...

  7. robotframework关键字

    *** Settings ***Library Selenium2Library *** Keywords ***Checkbox应该不被选择 [Arguments] ${locator} Check ...

  8. bzoj2306 [Ctsc2011]幸福路径 倍增 Floyd

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2306 题解 倍增 Floyd. 令 \(f[i][j][k]\) 表示走了 \(2^i\) 步 ...

  9. asp.net+扫描仪+图片上传

    问题: IE浏览器下使用Activex插件调用客户端扫描仪扫描文件并山传,可以将纸质档案(如合同.文件.资料等)扫描并将扫描图像保存到服务器,可以用于合同管理.档案管理等. 通过插件方式调用扫描仪扫描 ...

  10. B/S选择文件夹上传

    1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...