チケット #283 (assigned 不具合)

登録: 16 年

最終更新: 16 年

upload でjavascriptが埋め込めるセキュリティ的脅威があった

報告者: mn 担当者: atsuko
優先度: 備忘録 マイルストーン: Problems
コンポーネント: Galaxy バージョン:
キーワード: 関係者: mn, atsuko
GanttChart表示: OFF 依存TaskNo:
開始予定日: YYYY/MM/DD 終了予定日: YYYY/MM/DD

説明

該当コード lib/galaxy/tools/actions/upload.py

    def check_html( self, temp_name, chunk=None ):
        if chunk is None:
            temp = open(temp_name, "U")
        else:
            temp = chunk
        regexp1 = re.compile( "<A\s+[^>]*HREF[^>]+>", re.I )
        regexp2 = re.compile( "<IFRAME[^>]*>", re.I )
        regexp3 = re.compile( "<FRAMESET[^>]*>", re.I )
        regexp4 = re.compile( "<META[^>]*>", re.I )
        lineno = 0
        for line in temp:
            lineno += 1
            matches = regexp1.search( line ) or regexp2.search( line ) or regexp3.search( line ) or regexp4.search( line )
            if matches:
                if chunk is None:
                    temp.close()
                return True
            if lineno > 100:
                break
        if chunk is None:
            temp.close()
        return False

変更案。

  • regexp5 = re.compile( "<SCRIPT[>]*>", re.I ) を追加。
  • matches = regexp1.search( line ) or regexp2.search( line ) or regexp3.search( line ) or regexp4.search( line ) or regrexp5( line ) を追加。
    def check_html( self, temp_name, chunk=None ):
        if chunk is None:
            temp = open(temp_name, "U")
        else:
            temp = chunk
        regexp1 = re.compile( "<A\s+[^>]*HREF[^>]+>", re.I )
        regexp2 = re.compile( "<IFRAME[^>]*>", re.I )
        regexp3 = re.compile( "<FRAMESET[^>]*>", re.I )
        regexp4 = re.compile( "<META[^>]*>", re.I )
        regexp5 = re.compile( "<SCRIPT[^>]*>", re.I )
        lineno = 0
        for line in temp:
            lineno += 1
            matches = regexp1.search( line ) or regexp2.search( line ) or regexp3.search( line ) or regexp4.search( line ) or regrexp5( line )
            if matches:
                if chunk is None:
                    temp.close()
                return True
            if lineno > 100:
                break
        if chunk is None:
            temp.close()
        return False

チケットの履歴

更新者: atsuko (16 年 前)

  • ステータスnew から assigned に変更されました。

trunk の lib/galaxy/tools/actions/upload.py に上記反映させました.

更新者: atsuko (16 年 前)

緊急性高そうだったので,とりあえず galaxy.dbcls.jp に反映させました.

Note: チケットについてのヘルプは TracTickets を参照 して下さい。