ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 13 years ago

Closed 13 years ago

Last modified 12 years ago

#2519 closed defect (fixed)

ポータルクリエイター機能のフリーページでiframeが機能しない

Reported by: imamura623 Owned by: ebihara
Priority: minor Milestone: OpenPNE2.12.2
Component: 指定しない Version: 2.12.x & 2.14.x
Keywords: OpenPNE2.13.2 Cc:

Description (last modified by kudo)

■概要

ポータルクリエイター機能のフリーページにiframeタグを挿入するとiframeが機能しなくなる。

■仕様

■関連情報

元のDescription

http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=17098 より転記

先日の日記に書きましたが。
(バグ収集に引っかかってもらうため、再度書きます。)
http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diar...

ポータルクリエイター機能のフリーページにiframeタグを入れるとアドレス部分が、aタグに変換されてしまいiframeが機能できません。


↓これをフリーエリアに張ると
<iframe src="http://hogehoge.jp/" height=300 width=300>
</iframe>

↓こういうことになります。
<iframe src="<a href="http://hogehoge.jp/" target="_blank">http://hogehoge.jp/</a>" height=300 width=300>
</iframe>

Change History (16)

comment:1 Changed 13 years ago by kiwa

Priority: minormajor

comment:2 Changed 13 years ago by ebihara

Keywords: 再現待ち removed
Milestone: OpenPNE2.12RC2

現象が確認できているので再現待ちキーワードを外します。

comment:3 Changed 13 years ago by ebihara

Priority: majorminor

comment:4 Changed 13 years ago by ebihara

Milestone: OpenPNE2.12RC2OpenPNE2.12.1

comment:5 Changed 13 years ago by ogawa

Keywords: OpenPNE2.13.2 added

comment:6 Changed 13 years ago by ebihara

Milestone: OpenPNE2.12.1OpenPNE2.12.2

comment:7 Changed 13 years ago by okura

対処法があったので、報告コメントです。

<iframe src="http&#58;hogehoge.jp/" height=300 width=300></iframe>

アドレス部分の:(コロン)の部分を&#58;に置換する。 これにより、とりあえずの対処はできました。

comment:8 Changed 13 years ago by imamura623

フリーエリアにAタグを入れた場合でも同じ現象が発生するようです

http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=17843より転記

2.12のポータルクリエイとを使っているのですが、
管理画面から
フリーエリア設定で<a href="http://yahoo.co.jp">おしらせはこちら</a>

と入力したものが、実際の画面では、
<a href="<a href="http://yahoo.co.jp" target="_blank">http://yahoo.co.jp</a>">おしらせはこちら</a>

となっています。

フリーページでは、問題なかったので入力したタグが悪いとは思えないのですが。。。

みなさん、いかがですか?

comment:9 Changed 13 years ago by ebihara

#2732 にて、以下のような Ikuchang さんの提案がありました。

 日記やコメント、トピック、ポータルクリエイターなどでは、URLを記述すると自動でリンク化したり、小窓化したり、非常に便利なのですが、『HTML としてURLを書きたかった場合』にまで反応してしまうため、思わぬリンク化や小窓化がされてしまうことがあります。ポータルクリエイターのように、 HTMLも記述できるし、小窓も使えるというフリーエリアで、このような問題が発生しやすいです。

 そこで、""に囲まれたURLは、HTMLとして書きたかったと看做してリンク化や小窓化をしないというのはいかがでしょうか?

 リンク化や小窓化したいものを""で囲んで書くというのは、なかなかパターンとしてないのかな?と思います。

 ご検討の程、よろしくお願い致します。

comment:10 Changed 13 years ago by ebihara

Owner: changed from nobody to ebihara
Status: newassigned

Ikuchang さんの対応方法を検討してみます。

comment:11 Changed 13 years ago by ebihara

否定の言明を使ってマッチングをおこなう方法や " などを含めた URL のマッチングなども検討しましたが、パフォーマンス上の影響に配慮し、ポータルクリエイターの場合はなんとかして以下の処理を通るようにして対処したいです。

if (in_array($type, db_get_url2a_denied_list())) {
     // HTMLエスケープされていない場合
     // ", ', </a> がURLの後に続く場合はマッチさせない
     $url_pattern = '/https?:\/\/([a-zA-Z0-9\-.]+)\/?(?:[a-zA-Z0-9_\-\/.,:;~?@=+$%#!()&])*(?!["\'a-zA-Z0-9_\-\/.,:;~?@=+$%#!()&]|<\/a>)/';
 }

これにより、 " や '、 </a> がURLの直後に続く場合は小窓や自動リンクに変換されなくなります。

ただし、通常のリンク(=自動リンクの変換対象)の場合には、

if (in_array($GLOBALS['_CMD']['type'], db_get_url2a_denied_list())) {
    // t_url2aが無効: 何もせずに返す
    return $matches[0];
}

この処理を通さないような対策をする必要があります。

comment:12 in reply to:  11 Changed 13 years ago by ebihara

Replying to ebihara: 補足です。これらのコードは全て webapp/lib/smarty_plugins/modifier.t_url2cmd.php のものです。

comment:13 Changed 13 years ago by ebihara

Keywords: 確認中 added

smarty_modifier_t_url2cmd() の引数を追加することで対処しました。これにより、テンプレート側から明示的に指定があった場合はURLのマッチングの処理のみ、サイドバナーなどの自動リンクを無効にする領域と同一のフローを通るようになりました。

言明などはパフォーマンスに影響に与える危険があり、安易に使用箇所を増やしてしまうのは好ましくありません。また、検索するパターンの変更も極力避けたいところです。そのため、 " が URL の両端に含まれているかどうかの判定などは安定版ではおこなわず、この対処方法で実現することにしました。

対応リビジョンは以下です。

変換をおこなわないパターンは、

  • URL の直後に " が続く場合
  • URL の直後に ' が続く場合
  • URL の直後に </a> が続く場合

となります。

ご確認ください。

comment:14 Changed 13 years ago by ogawa

Keywords: テスト待ち added; 確認中 removed

comment:15 Changed 13 years ago by kiwa

Keywords: テスト待ち removed
Resolution: fixed
Status: assignedclosed

確認しました。問題なさそうです。

comment:16 Changed 12 years ago by kudo

Description: modified (diff)
Note: See TracTickets for help on using tickets.