- ベストアンサー
「<」や「>」を「&lt;」や「&gt;」に変換させなかったらどうなるのでしょうか?
今CGIをカスタマイズしています。 書き込みフォームでタグを使いたいのですが、タグをそのまま書き込むとHTML出力時に、&lt;や&gt;に変換されて表示されてしまいます。 なのでその変換する処理を無くしたいと思っているのですが、その処理を無くすとどういう不具合があるのでしょうか?無くそうと思っているのは下記のような箇所です。 ~ s/</&lt;/g; ~ s/>/&gt;/g; (わざと全角で書いてます) 書き込みデータにはdatファイルを使っています。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
念のため・・・ No.4は表示するときではなく、 >formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する 方法のつもりで書きました ※<>→<>変換処理の直後に入れる。 いちいち<font color="~">と記述するのは大変なので、 <色=red>赤文字</色>などと覚えやすいタグにするのも親切でいいかも #<色=red>~</色>を<font color=red>~</font>に =~ s/<(色)(.*?)>(.*?)<\/\1>/<font color$2>$3<\/font>/gi;
その他の回答 (5)
- PED02744
- ベストアンサー率40% (157/390)
>私は<b>や<font color=色>だけを使いたいのですが、その場合はどうすればいいのでしょうか? ANo.4さんの意見の様に「表示時に元に戻す」というのがスマートかな?と思います。 formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する(あるいは無視する)というのも手ですね。
お礼
最善のアドバイスありがとうございました。 おかげでいい方法が見つかりました。
- pipipi523
- ベストアンサー率40% (148/365)
必要なタグだけ元に戻す処理を入れたらどうでしょう #<b>~</b> =~ s/<(b)>(.*?)<\/\1>/<$1>$2<\/$1>/gi; #<font xxx>~</font> =~ s/<(font)(.*?)>(.*?)<\/\1>/<$1$2>$3<\/$1>/gi;# ↑ 閉じられていないのにも対処。もっと上手いやり方があるかも
- PED02744
- ベストアンサー率40% (157/390)
どうしても、タグを有効にしたいのなら、< や > だけでチェックするのではなく、 <a>だけは許すけど、<div>,<form>,<iframe>など他のタグは許さない。。。 などとしないと、レイアウトが崩れたり事実上サイトを乗っ取られたりします。
お礼
私は<b>や<font color=色>だけを使いたいのですが、その場合はどうすればいいのでしょうか?
- shinkun0114
- ベストアンサー率44% (1553/3474)
掲示板か何かでしょうか? その処理をなくせばお望みどおり、HTMLが有効になります。 ただし、書き込みの中のHTMLに間違った記述があれば、表示が崩れます。 たとえば、</html>と書き込んでしまえば、その後は表示されなくなってしまいますし、 大きいフォントを選んで、タグを閉じていなければ、その後の書き込みも すべて大きいままになります。 また、悪戯もあるかもしれません。 場合によってはブラウザクラッシャーを仕込まれたり、 妙なスクリプトを貼られるかもしれません。
- steel_gray
- ベストアンサー率66% (1052/1578)
例えば掲示板ならタグを使えるようにすると、単なる文字の修飾に留まらずjavascriptを埋め込めたりと、いたずらに使えてしまうので禁止/無効化してある場合がほとんどです。 また悪意がなくとも間違ったタグの記述や閉じ忘れによって表示がおかしくなることもあります。 また超有名CGIサイトのPerlスクリプトはデータの区切りに'<>'を使用していて、その方式が広まったために スクリプトによって何らかの処置をしないとデータファイルがうまく読み書きできなくなる事もあります。
お礼
悪意のある処理もできてしまうのですか・・・ 埋め込まれるとは例えばどのようなjavascriptなのでしょうか?
お礼
返事が遅れてすいません。 今確認してみたところ、ちゃんと動いておりました。 ありがとうございます。 最善の方法を教えていただき感謝しております。