Django解決跨站腳本攻擊XSS ---- 第15章

1. Django處理XSS攻擊

Django本身默認可以處理XSS攻擊,例如:

views.py:

def test(request):
    ret = '<script>alert("XSS")</script>'
    return render(request, 'test.html', {'ret': ret})

test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ ret }}
</body>
</html>

並沒有解析傳入的字符串,當作js腳本來執行。
在這裏插入圖片描述
但是當傳入到模板的數據是我們自己的並且是安全的,我們想要告訴系統這是安全的應該如何去做呢!有兩種方法,分別是後端標記字符串和前端標記字符串。

2. 前端標記字符串

在模板上寫 |safe 的方法可以標記字符串是安全的,可以去解析執行:

test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ ret|safe }}
</body>
</html>

在這裏插入圖片描述

3. 後端標記字符串

後臺把字符串標記成安全的需要在傳入模板之前就操作,使用到的是 django.utils.safestring 模塊中的 mark_safe 函數:

views.py:

def test(request):
    from django.utils.safestring import mark_safe
    ret = '<script>alert("XSS")</script>'
    ret = mark_safe(ret)
    return render(request, 'test.html', {'ret': ret})

test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ ret }}
</body>
</html>

與前端標記一樣:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章