django csrf,xss,sql注入

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

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

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

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

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

实现原理:在服务端生成一个随机的token,加入到HTTP请求参数中,服务器拦截请求,查看发送的token和服务端的是否一致,若一致,则允许请求;若不一致,则拒绝请求。

django项目setting.py里MIDDLEWARE就自带有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=‘123456‘, 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掉密码和敏感的信息。

原文地址:https://www.cnblogs.com/hooo-1102/p/12074462.html

时间: 2024-08-30 06:42:44

django csrf,xss,sql注入的相关文章

Django中的sql注入

Django中防止SQL注入的方法 方案一总是使用Django自带的数据库API.它会根据你所使用的数据库服务器(例如PostSQL或者MySQL)的转换规则,自动转义特殊的SQL参数.这被运用到了整个Django的数据库API中,只有一些例外:传给 extra() 方法的 where 参数.  这个参数故意设计成可以接受原始的SQL.使用底层数据库API的查询. ## select提供简单数据 # SELECT age, (age > 18) as is_adult FROM myapp_pe

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

https://blog.csdn.net/ChenRui_yz/article/details/86489067 随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,下面列举一些常见的安全漏洞和对应的防御措施.01 常见的Web安全问题 1.前端安全 XSS 漏洞 CSRF 漏洞 2.后端安全 SQL 注入漏洞 程序员学架构mikechen优知02 XSS漏洞 1.XSS简介 跨站脚本(cross site script)简称为XSS,是一种经常出现在web应用中的

XSS、CSRF、SQL注入原因分析,危害,解决方案

一.xss 名词解释:xss指的是攻击者利用用户提交的数据没有就行过滤和转义处理的缺点,进而添加一些代码到web界面中去.利用了系统对用户的信任 危害:盗取各种账号,网站挂马,非法转账等. 造成原因:过于信任客户端提交的数据. 解决办法:对客户端提交过来的数据进行过滤,转义,正则校验. 举例: 有个表单域:<input type=“text” name=“content” value=“这里是用户填写的留言”> 1.假若用户填写数据为:<script>alert('dog!')&l

sqlmap的学习之路-自动化测试SQL注入工具

sqlmap 自动化测试sql 注入问题  会返回版本信息等等. Sqlmap是开源的自动化SQL注入工具,由Python写成,因此运行需要安装python环境. 如需了解更多sqlmap资料可以访问官方http://sqlmap.org/,https://github.com/sqlmapproject/sqlmap,https://www.python.org . 注意:sqlmap只是用来检测和利用sql注入点的,并不能扫描出网站有哪些漏洞,使用前请先使用扫描工具扫出sql注入点. 特点:

SQL 注入、XSS 攻击、CSRF 攻击

SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参数的查询字符串里面提交给服务器,从而让服务器执行编写的恶意的 SQL 命令. 对于 web 开发者来说,SQL 注入已然是非常熟悉的,而且 SQL 注入已经生存了 10 多年,目前已经有很成熟的防范方法,所以目前的 web 应用都很少会存在漏洞允许进行 SQL 注入攻击. 除非是入门开发人员,在开发

Web攻防之XSS,CSRF,SQL注入

摘要:对Web服务器的攻击也可以说是形形色色.种类繁多,常见的有挂马.SQL注入.缓冲区溢出.嗅探.利用IIS等针对Webserver漏洞进行攻击.本文结合WEB TOP10漏洞中常见的SQL注入,跨站脚本攻击(XSS),跨站请求伪造(CSRF)攻击的产生原理,介绍相应的防范方法. 关键字:SQL注入,XSS,CSRF 1.SQL注入 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令. 攻击者通过在应用程序预先定义好的SQ

Web攻防之XSS,CSRF,SQL注入(转)

摘要:对Web服务器的攻击也可以说是形形色色.种类繁多,常见的有挂马.SQL注入.缓冲区溢出.嗅探.利用IIS等针对Webserver漏洞进行攻击.本文结合WEB TOP10漏洞中常见的SQL注入,跨站脚本攻击(XSS),跨站请求伪造(CSRF)攻击的产生原理,介绍相应的防范方法.关键字:SQL注入,XSS,CSRF1.SQL注入 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令. 攻击者通过在应用程序预先定义好的SQL语

XPath注入跟SQL注入差不多,只不过这里的数据库走的xml格式

SQL注入这块不想细聊了,相信很多朋友都听到耳朵长茧,不外乎是提交含有SQL操作语句的信息给后端,后端如果没有做好过滤就执行该语句,攻击者自然可以随意操纵该站点的数据库. 比如有一个图书馆站点book.com,你点进一本书的详情页面,其url是这样的: book.com/book?id=100 说明这本书在数据库中的键值是100,后端收到url参数后就执行了数据库查询操作: select * from booktable where id='100' 那么如果我们把url更改为 book.com

XSS攻击&amp;SQL注入攻击&amp;CSRF攻击?

- XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式.跨站脚本攻击分有两种形式:反射型攻击(诱使用户点击一个嵌入恶意脚本的链接以达到攻击的目标,目前有很多攻击者利用论坛.微博发布含有恶意脚本的URL就属于这种方式)和持久型攻击(将恶意脚本提交到被攻击网站的数据库中,用户浏览网页时,恶意脚本从数据库中被加载到页面执行,QQ邮箱的早期版本就曾经被利用作为持久型跨站脚本攻击的平台).XSS虽然不是什么新鲜玩意,但是攻击