Uploaded image for project: 'Teeda'
  1. Teeda
  2. TEEDA-42

HtmlResponseWriter#writeURIAttribute(String, Object, String) が javascript: で始まるものもエスケープする

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.0-beta-5
    • Fix Version/s: 1.0-beta-6
    • Component/s: Teeda Core
    • Labels:
      None

      Description

      writeURIAttribute(String, Object, String)かencodeURIAttribute(String)でそれをチェックするようにした方が良い気がします。
      SunRI とMyFaces もjavascript:をチェックしていました。ざっと見た感じでは、MyFaces のコードの方が良さそうな気もします。

        Activity

        Hide
        manhole manhole added a comment -

        りょーかいです。
        (TODOには入れていたのです)

        Show
        manhole manhole added a comment - りょーかいです。 (TODOには入れていたのです)
        Hide
        manhole manhole added a comment -

        writeURIAttributeではなくてwriteAttributeの方で、"javascript:"に対応しました。
        "javascript:"を書くのはonclick属性等のevent系と考えたためです。
        (onXxxxxはwriteAttributeにしているので。writeURIAttributeの方が良いのかな? どうでしょう??)

        Show
        manhole manhole added a comment - writeURIAttributeではなくてwriteAttributeの方で、"javascript:"に対応しました。 "javascript:"を書くのはonclick属性等のevent系と考えたためです。 (onXxxxxはwriteAttributeにしているので。writeURIAttributeの方が良いのかな? どうでしょう??)
        Hide
        shinsuke shinsuke added a comment -

        修正をありがとうございます。
        でも、writeURIAttributeに関しても、修正が必要です。現在、遭遇している問題は、form タグの action などURLを扱うところで、javascript :を書いたときに発生しています。そのため、MyFacesとかでは、チェックしてエスケープしないようにしているみたいです。
        writeAttributeについては、確かにその修正があった方が良いような気がします。でも、MyFacesもSunRIもjavascript:をチェックなどしてないですね・・・。

        Show
        shinsuke shinsuke added a comment - 修正をありがとうございます。 でも、writeURIAttributeに関しても、修正が必要です。現在、遭遇している問題は、form タグの action などURLを扱うところで、javascript :を書いたときに発生しています。そのため、MyFacesとかでは、チェックしてエスケープしないようにしているみたいです。 writeAttributeについては、確かにその修正があった方が良いような気がします。でも、MyFacesもSunRIもjavascript:をチェックなどしてないですね・・・。
        Hide
        manhole manhole added a comment -

        ではwriteURIAttributeの方も対応しますね。

        • writeURIAttribute
        • writeAttribute

        どちらでも、"javascript:"で始まったら何もエスケープしないようにします。

        Show
        manhole manhole added a comment - ではwriteURIAttributeの方も対応しますね。 writeURIAttribute writeAttribute どちらでも、"javascript:"で始まったら何もエスケープしないようにします。
        Hide
        manhole manhole added a comment -

        勘違いに気づきました。

        onclick="document.write("<b>xxx</b>");"
        

        ↑のようにエスケープされていても、javascriptとして↓のように解釈されて実行されるのですね。

        document.write('<b>xxx</b>');
        

        ですので、

        • writeAttribute
          • 今まで通り
        • writeURIAttribute
          • "javascript:"だったらwriteAttributeと同様にエスケープする

        というロジックにすればOKそうです。

        Show
        manhole manhole added a comment - 勘違いに気づきました。 onclick= "document.write(&quot;&lt;b&gt;xxx&lt;/b&gt;&quot;);" ↑のようにエスケープされていても、javascriptとして↓のように解釈されて実行されるのですね。 document.write('<b>xxx</b>'); ですので、 writeAttribute 今まで通り writeURIAttribute "javascript:"だったらwriteAttributeと同様にエスケープする というロジックにすればOKそうです。
        Hide
        manhole manhole added a comment -

        対応しました。
        (Revision: 1640)

        Show
        manhole manhole added a comment - 対応しました。 (Revision: 1640)

          People

          • Assignee:
            manhole manhole
            Reporter:
            shinsuke shinsuke
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development