zoukankan      html  css  js  c++  java
  • Django_博客_XSS 攻击防范

    背景:

      博客项目中用户后台添加文章时,若通过富文本编辑器输入 标签内容或者 js 指令会导致文章排版错乱,甚至进行XSS攻击

    攻击现象:

       文本内容输入 js 指令

       文章描述时正确显示其文本内容

     

      但在打开页面的时候标签内容被浏览器读取从而执行js 指令,然后才正确进行其他操作

     防范方式

      将文本内容在保存数据库之前就要进行一次筛选, 

      去除 script 标签. 当然可以去除很多其他标签比如 link 标签之类的

      为了操纵简便, 这其中需要用到 bs 模块

     1 def add_article(request):
     2     if request.method == "POST":
     3         title = request.POST.get("title")
     4         article_content = request.POST.get("article_content")
     5         # 先拿到当前的 user
     6         user_obj = request.user
     7         # 截取文章的描述信息
     8         # article_desc = article_content[0:150]
     9         # 如果这么截取就会把标签也截取了,不闭合会导致页面错乱.我们只需要截取文本内容
    10         # 目前只能用正则来处理,太麻烦了. 用 BeautifulSoup 处理会方便很多
    11         from bs4 import BeautifulSoup
    12         bs = BeautifulSoup(article_content,"html.parser")
    13         article_desc = bs.text[0:150]+"..."

    14 # 为了防止 xss 攻击 需要对内容进行过滤 并 删除 15 for tag in bs.find_all(): 16 if tag.name in ["script","link"]: 17 # decompose 方法可以将被选中的标签移除并彻底删除 18 tag.decompose()
    19 # 弄一个文章对象出来 20 article_obj = models.Article.objects.create(user=user_obj,title=title,desc=article_desc) 21 # 弄一个文章描述对象出来 22 models.ArticleDetail.objects.create(content=str(bs),article=article_obj) 23 return HttpResponse("添加成功") 24 return render(request, "add_article.html")
  • 相关阅读:
    Access restriction: The type * is not accessible due to restrict,报错问题,只试过第二种,OK。
    Java读写Properties文件
    MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping
    Mybatis 3+Mysql 实现批量插入
    Java访问MySQL数据库的SqlHelper类以及测试程序
    sun.net.ftp.FtpClient(java访问/操作ftp)
    java通过ftp方式读取文件,并解析入库
    Linux CPU 上下文切换
    Perl-DBI
    Perl文件句柄和文件描述符
  • 原文地址:https://www.cnblogs.com/shijieli/p/10142282.html
Copyright © 2011-2022 走看看