質問編集履歴
2
回答後に質問内容の変更が行われたため
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Markdownをテンプレートで表示させる際のXSS対策について。
|
1
|
+
Djangoで利用者がMarkdownをテンプレートで表示させる際に{{safe}}をした場合のXSS対策について。
|
body
CHANGED
@@ -1,6 +1,19 @@
|
|
1
|
-
|
1
|
+
Djangoでユーザーがマークダウンエディタから簡易的な投稿を出来るアプリを作成しました。
|
2
|
-
しかし、不特定多数のユーザーが投稿できる状態では、safeはクロスサイトスクリプティング(XSS)の観点から見て良くないのではと思います。
|
3
|
-
|
4
|
-
|
2
|
+
以下のようにマークダウンをhtmlに変換するフィルターを作りました。
|
3
|
+
```python
|
4
|
+
from django import template
|
5
|
+
from django.template.defaultfilters import stringfilter
|
6
|
+
import markdown
|
7
|
+
|
8
|
+
register = template.Library()
|
9
|
+
|
5
|
-
|
10
|
+
@register.filter
|
6
|
-
|
11
|
+
@stringfilter
|
12
|
+
def markdown_html(value):
|
13
|
+
return markdown.markdown(value)
|
14
|
+
```
|
15
|
+
|
16
|
+
これをテンプレートで以下のようにすれば、マークダウンがHTML表示されます。
|
17
|
+
```python
|
18
|
+
{{ markdowntxt | markdown_html | safe }}
|
19
|
+
```
|
1
情報の修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
Markdownをテンプレートで表示させる際のXSS対策について。
|
body
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
Djangoでユーザーがマークダウンエディタから簡易的な投稿を出来るアプリを作成しました。
|
2
|
-
以下のようにマークダウンをhtmlに変換するフィルターを作りました。
|
3
|
-
```python
|
4
|
-
from django import template
|
5
|
-
from django.template.defaultfilters import stringfilter
|
6
|
-
import markdown
|
7
|
-
|
8
|
-
register = template.Library()
|
9
|
-
|
10
|
-
@register.filter
|
11
|
-
@stringfilter
|
12
|
-
def markdown_html(value):
|
13
|
-
return markdown.markdown(value)
|
14
|
-
```
|
15
|
-
|
16
|
-
これをテンプレートで以下のようにすれば、マークダウンがHTML表示されます。
|
17
|
-
```python
|
18
|
-
{{ markdowntxt | markdown_html | safe }}
|
19
|
-
```
|
20
|
-
|
21
1
|
通常であれば、エスケープが無効になっていますが、これをsafeを使うことによりエスケープを解除しています。
|
22
2
|
しかし、不特定多数のユーザーが投稿できる状態では、safeはクロスサイトスクリプティング(XSS)の観点から見て良くないのではと思います。
|
23
3
|
|