MovableType 4.25 のコメント投稿でJavaScript イベント属性(onclick等)を有効にする

MovableType 4.25 のコメント投稿でJavaScript イベント属性(onclick等)を有効にする

Posted at May 25,2009 1:37 AM
Tag:[Comment, MovableType, Sanitize]

Movable Type 4.25 のコメント欄の(X)HTML要素に onclick 属性や onleypress 属性を適用させる方法です。質問を頂きましたので本エントリーで回答します。

1.基本動作

コメント欄に次のような(X)HTMLを記述すると、

<a href="foo.html" onclick="foo()">foolink</a>

onclick 属性はサニタイズされて、

<a href="foo.html">foolink</a>

となります。これはコメントに書き込まれた onclick 属性によるXSS(クロスサイトスクリプティング)対策です。onclick のみだけでなく、JavaScript イベント属性(on~)は許容されていません。

なお、Movable Type 4.25 では、ブログ管理画面の「設定」→「コメント」で、「HTMLタグを制限」の項目に、JavaScript イベント属性を設定しても(下)、コメント投稿時に設定したJavaScript イベント属性はすべて除去されます。

2.JavaScript イベント属性を有効にする

lib/MT/Sanitize.pm の下記の赤色で示した1行をコメントアウトするか、削除すれば、JavaScript イベント属性の追加ができるようになります(1項で示した「HTMLタグを制限」に、JavaScript イベント属性を設定してください)。

...前略...
if ($ok_tags->{$name} ||
    (exists $tag_attr->{$name} && $tag_attr->{$name} eq '/')) {
    if ($inside) {
        my @attrs;
        while ($inside =~ m/([:\w]+)\s*=\s*(['"])(.*?)\2/gs) {
            my ($attr, $q, $val) = (lc($1), $2, $3);
            # javascript event attributes explicitly not allowed
            next if $attr =~ m/^on/;
            if ($ok_tags->{'*'}{$attr} ||
               (ref $ok_tags->{$name} && ($ok_tags->{$name}{'*'} || $ok_tags->{$name}{$attr}) && !exists($ok_tags->{$name}{'!' . $attr}))) {
...後略...

なお、コメント投稿において JavaScript イベント属性を有効にすると、XSSによる脆弱性が伴いますので、変更に際してはご自身の責任で行なってください。

この XSS 対処の仕様は4.25 から追加されています。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)