• ベストアンサー

「<」や「>」を「&lt;」や「&gt;」に変換させなかったらどうなるのでしょうか?

今CGIをカスタマイズしています。 書き込みフォームでタグを使いたいのですが、タグをそのまま書き込むとHTML出力時に、&lt;や&gt;に変換されて表示されてしまいます。 なのでその変換する処理を無くしたいと思っているのですが、その処理を無くすとどういう不具合があるのでしょうか?無くそうと思っているのは下記のような箇所です。 ~ s/</&lt;/g; ~ s/>/&gt;/g; (わざと全角で書いてます) 書き込みデータにはdatファイルを使っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.6

念のため・・・ No.4は表示するときではなく、 >formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する 方法のつもりで書きました ※<>→&lt;&gt;変換処理の直後に入れる。 いちいち<font color="~">と記述するのは大変なので、 <色=red>赤文字</色>などと覚えやすいタグにするのも親切でいいかも #<色=red>~</色>を<font color=red>~</font>に =~ s/&lt;(色)(.*?)&gt;(.*?)&lt;\/\1&gt;/<font color$2>$3<\/font>/gi;

sei1975
質問者

お礼

返事が遅れてすいません。 今確認してみたところ、ちゃんと動いておりました。 ありがとうございます。 最善の方法を教えていただき感謝しております。

その他の回答 (5)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.5

>私は<b>や<font color=色>だけを使いたいのですが、その場合はどうすればいいのでしょうか? ANo.4さんの意見の様に「表示時に元に戻す」というのがスマートかな?と思います。 formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する(あるいは無視する)というのも手ですね。

sei1975
質問者

お礼

最善のアドバイスありがとうございました。 おかげでいい方法が見つかりました。

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.4

必要なタグだけ元に戻す処理を入れたらどうでしょう #<b>~</b> =~ s/&lt;(b)&gt;(.*?)&lt;\/\1&gt;/<$1>$2<\/$1>/gi; #<font xxx>~</font> =~ s/&lt;(font)(.*?)&gt;(.*?)&lt;\/\1&gt;/<$1$2>$3<\/$1>/gi;# ↑ 閉じられていないのにも対処。もっと上手いやり方があるかも

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

どうしても、タグを有効にしたいのなら、&lt; や &gt; だけでチェックするのではなく、 <a>だけは許すけど、<div>,<form>,<iframe>など他のタグは許さない。。。 などとしないと、レイアウトが崩れたり事実上サイトを乗っ取られたりします。

sei1975
質問者

お礼

私は<b>や<font color=色>だけを使いたいのですが、その場合はどうすればいいのでしょうか?

回答No.2

掲示板か何かでしょうか? その処理をなくせばお望みどおり、HTMLが有効になります。 ただし、書き込みの中のHTMLに間違った記述があれば、表示が崩れます。 たとえば、</html>と書き込んでしまえば、その後は表示されなくなってしまいますし、 大きいフォントを選んで、タグを閉じていなければ、その後の書き込みも すべて大きいままになります。 また、悪戯もあるかもしれません。 場合によってはブラウザクラッシャーを仕込まれたり、 妙なスクリプトを貼られるかもしれません。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

例えば掲示板ならタグを使えるようにすると、単なる文字の修飾に留まらずjavascriptを埋め込めたりと、いたずらに使えてしまうので禁止/無効化してある場合がほとんどです。 また悪意がなくとも間違ったタグの記述や閉じ忘れによって表示がおかしくなることもあります。 また超有名CGIサイトのPerlスクリプトはデータの区切りに'<>'を使用していて、その方式が広まったために スクリプトによって何らかの処置をしないとデータファイルがうまく読み書きできなくなる事もあります。

sei1975
質問者

お礼

悪意のある処理もできてしまうのですか・・・ 埋め込まれるとは例えばどのようなjavascriptなのでしょうか?

関連するQ&A