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")
原文地址:https://www.cnblogs.com/shijieli/p/10142282.html