質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2041閲覧

DjangoのHTMLで分からない点があります。

hage0280

総合スコア19

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/02/12 09:08

DjangoのChannelsのwebsocketでチャットを作るチュートリアルをやっているのですが、下記コードのScriptタグ内の一行目の
var roomName = "{{ room_name|escapejs }}";
の右の内容が全く分かりません。Djangoのタグで、データを取ってくるときに使うタグで、room_nameという変数は前のチャットルームを選択する画面で送られてくる情報であるということは分かっています。
ただescapejsが何なのか、そこが分かっていません。

ご教授願います。

JavaScript

1<!-- chat/templates/chat/room.html --> 2<!DOCTYPE html> 3<html> 4<head> 5 <meta charset="utf-8"/> 6 <title>Chat Room</title> 7</head> 8<body> 9 <textarea id="chat-log" cols="100" rows="20"></textarea><br/> 10 <input id="chat-message-input" type="text" size="100"/><br/> 11 <input id="chat-message-submit" type="button" value="Send"/> 12</body> 13<script> 14 var roomName = "{{ room_name|escapejs }}"; 15 16 var chatSocket = new WebSocket( 17 'ws://' + window.location.host + 18 '/ws/chat/' + roomName + '/'); 19 20 chatSocket.onmessage = function(e) { 21 var data = JSON.parse(e.data); 22 var message = data['message']; 23 document.querySelector('#chat-log').value += (message + '\n'); 24 }; 25 26 chatSocket.onclose = function(e) { 27 console.error('Chat socket closed unexpectedly'); 28 }; 29 30 document.querySelector('#chat-message-input').focus(); 31 document.querySelector('#chat-message-input').onkeyup = function(e) { 32 if (e.keyCode === 13) { // enter, return 33 document.querySelector('#chat-message-submit').click(); 34 } 35 }; 36 37 document.querySelector('#chat-message-submit').onclick = function(e) { 38 var messageInputDom = document.querySelector('#chat-message-input'); 39 var message = messageInputDom.value; 40 chatSocket.send(JSON.stringify({ 41 'message': message 42 })); 43 44 messageInputDom.value = ''; 45 }; 46</script> 47</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/12 09:11

escapejs で検索するとそのまま出てきますが、 それでは何が足らなかったのでしょうか。 調べたことがあればきちんと追記してください
guest

回答2

0

escapeJS

JavaScript文字列で使用する文字をエスケープします。
これにより、文字列がHTMLまたはJavaScriptテンプレートリテラルで安全に使用できるようにはなりませんが、
テンプレートを使用してJavaScript / JSONを生成する際の構文エラーから保護されます。

投稿2020/02/12 09:11

azuapricot

総合スコア2341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Djangoテンプレート言語
escapejs - 公式サイトDocument

var roomName = "{{ room_name|escapejs }}";

この縦棒|はフィルタというものです。
まぁ関数みたいなものです。

左の値が右側のフィルタの引数として実行され、
フィルタの結果が戻り値になるという仕組みです。

escapejsを実際に見てみましょう。

Escapes characters for use in JavaScript strings. This does not make the string safe for use in HTML or JavaScript template literals, but does protect you from syntax errors when using templates to generate JavaScript/JSON.

日本語訳するとこうなります。

JavaScriptの文字列で使用するためのエスケープ文字。
これは、HTMLまたはJavaScriptテンプレートで文字列を安全に使用することはできませんが、
テンプレートを使用してJavaScript/JSONを生成する際の構文エラーから保護します。

つまり、スクリプトタグ内でベタッと貼り付けてしまっているので、
;{}等の文字列が含まれる場合、勝手にJSのコードが改行されたり変な動作を起こす可能性があるわけですね。
コレにより、ユーザー名等に無理やり任意コードを実行させるJavaScriptコードを仕込む余地があるとXSS脆弱性があることになります。
管理者用入り口を持つWebサービスから管理者のクッキー情報を抜き出して、悪意のコード実行者の持つサーバへAjax通信を投げて取得、それを元に管理者用入り口から入るなんて事も可能です。

この辺の背景もあるのでとりあえず付けとけみたいなフィルタとなっています。

投稿2020/02/12 09:22

miyabi-sun

総合スコア21203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問