Hi,
I’d like to customize the reply/embedded-post. This requires a modification to the _computeCooked method in post-cooked via a plugin; essentially when this.attrs.embeddedPost is true, render something else.
I noticed it’s easier to override or reopen ‘conventional’ Ember classes or the widgets created using ‘createWidget’. What would be the best way to achieve this for the PostCooked class?
この問題の解決策が見つかりましたか?もしよろしければ、共有していただけると大変嬉しいです。
fzngagan
(Faizaan Gagan)
2020 年 6 月 27 日午前 8:32
3
api.decorateCookedでは不十分ですか?
確信が持てません。まだ確認していません。この部分を変更したいと考えています。
return true;
}
this._toggleQuote($aside);
});
$title.data("has-quote-controls", true);
}
}
});
}
_computeCooked() {
const cookedDiv = createDetachedElement("div");
cookedDiv.classList.add("cooked");
if (
(this.attrs.firstPost || this.attrs.embeddedPost) &&
this.ignoredUsers &&
this.ignoredUsers.length > 0 &&
this.ignoredUsers.includes(this.attrs.username)
) {
cookedDiv.classList.add("post-ignored");
カテゴリ別に _computedCooked を置き換えたいです。
cookedDiv.innerHTML = this.attrs.cooked;
このコードを、カテゴリに応じてカスタムコンテンツに置き換えたいです。もっとも、decorateCooked でも可能かもしれません。少し調べてみると、jQuery を使いたくないため、decorateCookedElement が適切なように思えます。ありがとうございました
1 日ほどあれこれ試行錯誤した結果、この回答に行きつきました。
Is it possible to mount a widget into a post from decorateCooked? The polls plugin seems to do some funky stuff with Ember components/controllers/templates, and a set of widgets seem like they might be easier to work with.
どうやらこのアプローチは無駄だったようで、別の方法を探る必要があります。
elem.innerHTML に <script>alert(1)</script> を設定すると、エスケープが解除されて <script>alert(1)</script> になってしまいます(作曲画面で入力している間は、エスケープされていない状態で入力するとプレビューで削除されるのが確認できます)。これは問題でしょうか、それとも CSP が阻止してくれるのでしょうか?
https://meta.discourse.org/t/mitigate-xss-attacks-with-content-security-policy/104243! csp error|690x191
説明の一部としてスクリプトタグを含む投稿も、同様にこれらの CSP エラーを発生させているようです。今、本当に混乱しています。保存型 XSS を気にする必要はあるのでしょうか、それとも CSP が自動的にブロックしてくれるのでしょうか?作曲画面では self-XSS を防ぐために CKEditor を使用しています。もし気にする必要があるなら、安全でないタグを除去する必要があるようです。現時点では以下のようにしています。
value = Loofah.fragment(value).scrub!(:escape).to_s
しかし、elem.innerHTML にこの値を設定すると HTML エンティティがエスケープ解除されてしまうため、全く効果がありません。
編集:ついに混乱の原因を見つけました。要素の検査機能では実際の HTML は表示されません。HTML エンティティはすでに変換されて表示されてしまいます。
インスペクターで「HTML として編集」をクリックすると、実際にはすべて正常であることが明確になります。目に見えないはずのタグがレンダリングされていることを目撃していた時点で、この方向に気づくべきでした。