私は単一ページの webapp に取り組んでいます。DOM ノードを直接作成してレンダリングを行っています。特に、ユーザーが提供するすべてのデータは、 でテキスト ノードを作成することによってページに追加されますdocument.createTextNode("user data")
。
このアプローチは、HTML インジェクション、クロス サイト スクリプティング (XSS)、およびユーザーが実行できるその他すべての悪事の可能性を回避しますか?
私は単一ページの webapp に取り組んでいます。DOM ノードを直接作成してレンダリングを行っています。特に、ユーザーが提供するすべてのデータは、 でテキスト ノードを作成することによってページに追加されますdocument.createTextNode("user data")
。
このアプローチは、HTML インジェクション、クロス サイト スクリプティング (XSS)、およびユーザーが実行できるその他すべての悪事の可能性を回避しますか?
プレーンテキストノードを作成するので、そうです。
ただし、安全でない方法を使用して、データが入力されているチャネルからデータを取得することにより、XSS の問題が発生する可能性がcreateTextNode
あります。
例: 以下は安全ではありません:
document.createTextNode('<?php echo $_GET['xss']; ?>');
…しかし、危険はecho
JavaScript ではなくPHP にありますcreateTextNode
。
はい、XSS セーフsomeElement.innerText = "..."
です。
(兄弟の回答は、XSS に脆弱な PHP スニペットを含めることで混乱を招きます。)