• ベストアンサー

入力フォーム内のタグ開始記号(<>)の置き換えについて

初めて質問させていただきます、初心者プログラマーです。 web上で使用する、質問用入力フォームを作成しているのですが、 セキュリティの問題上、入力フォーム内にタグが打ち込まれたとき それを無効化するために、タグ開始と終わりのカッコがそのまま スルーしないよう、アンパーサンドlt;とアンパーサンドgt;に 置き換える処理を行いたいと思うのですが、どのように記述したら よいのかがわかりません。この処理はフォームの入力欄全てに対して 有効にしたいのですが、どのように記述したらよいのでしょうか… どうかご教授お願い致します。

  • Rammy
  • お礼率33% (2/6)

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

<や>を&lt;や&gt;に変えるには、replaceメソッドを使います。 HTMLのサンプルを載せますので、参考にしてみて下さい。 (IE&NN動作確認済み。そのままコピペできます。) <HTML> <HEAD> <SCRIPT language="JavaScript"> <!-- var names = new Array('t1', 't2', 'ta'); function check() { with (document) { for (var i in names) { f[names[i]].value = f[names[i]].value.replace(/</g,"&lt;"); f[names[i]].value = f[names[i]].value.replace(/>/g,"&gt;"); } } } //--> </SCRIPT> </HEAD> <BODY> <FORM name="f"> <INPUT type="text" name="t1" size="50"><BR> <INPUT type="text" name="t2" size="50"><BR> <TEXTAREA name="ta" cols="50" rows="8"></TEXTAREA><BR> <INPUT type="button" name="b" value="check" onClick="check()"><BR> </FORM> </BODY> </HTML> 解析も勉強のうちですので、頑張って解析してくださいね。 下記のサイトも勉強には欠かせません。

Rammy
質問者

お礼

補足内に書いたallcheckの一番下に、check();の一行を記述して、 無事にすべて解決しました。 よく考えずに質問ばかりしてすみませんでした。 今後とも精進し、プログラムを自分の手でバリバリ一から書けるように がんばります。 ご回答いただき本当にありがとうございました。

Rammy
質問者

補足

ご回答ありがとうございます!早速試して、実行できました。 早急に解決しなければならない問題だったので、とても助かりました。 本当にありがとうございます。 ただ、後ひとつだけ質問してもよろしいですか? 今現在、入力フォームのsubmitボタンでonClick時処理としてすでに 以下のallcheck()を呼び出しています。 function allcheck(){ if(check_roman(document.form1.mail1.value)==false){ return false; } if(check_roman(document.form1.mail2.value)==false){ return false; } if(bytecheck(document.form1.text.value)==false){ return false; } } //allcheck内で呼び出しているスクリプト function check_roman(strTarget){ var i,transTarget; var checkStr=new String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.1234567890"); transTarget=strTarget.replace(/ /g,""); for(i=0;i<transTarget.length;i++){ if(checkStr.indexOf(transTarget.charAt(i),0)==-1){ alert("メールアドレスは半角英数字で"); return false; } } return true; } //allcheck内で呼び出しているスクリプト function bytecheck(){ txt = document.form1.text.value; n = txt.length; if (n > 2000){ alert("問合せ内容は2000文字以内で"); return false; } return true; } このallcheckスクリプトの中に、教えていただいたcheckスクリプトの 呼出を加えるとすると、どのように記述したらよいのでしょうか・・・。 何度も申し訳ありませんが、ご教授いただけると幸いです。 どうか、よろしくお願いいたします

その他の回答 (1)

noname#1785
noname#1785
回答No.1

置き換えに関しては、下記のようにすればできます。 function replaceValue(){  ver strValue=document.***.***.value;  ↑ここは、入力された値が入るように変えてください。  res1=strValue.indexOf("<",0); //文字列中から<を検索  res2=strValue.indexOf(">",0); //文字列中から>を検索  if(res1 != -1){ //該当がなければ-1が返るので   strMsg=strValue.replace("<","&lt;"); //<を<に置き換え  }  if(res2 != -1){ //該当がなければ-1が返るので   strMsg=strValue.replace(">","&gt;"); //<を<に置き換え  } } # サンプル中の"&lt;"と"&gt;"は大文字で書かれていますが、実際は小文字です。 後は、この関数をどう呼ぶかを考えてみてください。 例えば、全部入力が終わった後にボタンを押して、ならそのボタンのonClickに設定すればいいし、入力後であれば、その入力フォームのonBlurまたはonChangeに設定すればOKです。 (ただし、onBlurまたはonChangeに関しては、ブラウザによって動作が異なる可能性があります)

Rammy
質問者

お礼

ご回答ありがとうございます! とても詳しく解説してくださり、本当にありがとうございました。 おかげで、非常に参考になりました。 今後とも精進していこうと思います。 本当にありがとうございました!

関連するQ&A

  • <  タグの事で・・・

    <Font Color="#ff0000">などと色を変えるタグがありますよね? それの<や>の部分の事で・・・ <=<、&lt  >=>、&gt などとあるんですが、それが無効なので、他の方法は無いでしょうか? よろしければ教えてください。 お願いします。 (ちなみにそのオンラインゲームはタグ禁止ではありません)

  • ▲▲HTMLで特殊記号を入力する際にへんになる??▲▲

    こんばんは☆ HTMLで特殊記号を表示させる場合、例えば☆ < →&lt; 又は < > →&gt; 又は > とあるのはわかっているのですが、もしこのようなタグの中に組み込む場合どのように記入すればよいでしょうか?? -----例----- &title02=<font color="#000000">基本タグ</font>& &data02=例HTML& ------------ ↑これはフラッシュを設定するtxtに書かれているものです。すでに&が入っているためか・・・。 ↓のように入力すると -----例----- &title02=<font color="#000000">基本タグ</font>& &data02=例&lt;HTML&gt;& ------------ 基本タグ 例 ------------ ↑このように表示されてしまいます・・・。 本当は↓ ------------ 基本タグ 例<HTML> ------------ ↑このように表示させたいのです。。。。 わかる方、教えてください♪ よろしくお願いします♪

    • ベストアンサー
    • HTML
  • 管理画面の入力フォームをhtml編集可能にする場合

    PHP+MySQLを使っています。 管理画面から入力した商品情報のデータをDBに保存し、DBから情報を取得してホームページに反映させたいと思っています。 その管理画面の入力フォームで、商品詳細を記述する入力ボックスをhtml編集できるようにする場合(タグをつけて記述できるようにする場合)、クロスサイトスクリプティングやSQLインジェクションなどの攻撃の対策としてどういった手法がありますか。 html編集できない入力ボックスを作るときは、私は、タグを取り除くなどの処理をしてDBに保存しています。タグをつけたままDBへ保存するというのはセキュリティとしてはよくないのではと思う部分があり、みなさんはどうされているのかと思い、質問させていただきました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 受信したメールがタグのまま表示されてしまいます・・・

    メールフォームを作成してみたのですが、 あるメールを受信した際に、 (スペース)&lt;br&gt; と、改行タグ<br>がタグのまま表示 されてしまっています。 考えられる原因等はありますでしょうか。 ご教授頂けましたら幸いです。 以上、よろしくお願いします。

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

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

    • ベストアンサー
    • CGI
  • クエリの抽出条件をフォームで入力したものにしたい

    こんにちは。すみませんうまくいかないのでどなたか助言していただきたくお願いいたします。 クエリの抽出条件をフォームで入力した値にしたいと思っており、クエリの抽出条件欄に >=[集計フォーム]![開始日入力] と入力しました。「フォームの名前」!「テキスト名」です。 そしてフォームに値を入力してクエリ実行ボタンをクリックするとパラメータクエリのようになってしまいます。 フォーム内で何か設定をしないといけないのでしょうか? すみませんがよろしくお願いいたします。

  • 入力フォーム作成について

    質問させていただきます。 ホームページビルダーで入力フォームを作成したのですが、入力フォーム記入欄に半角スペースが入ると、送られてくるメールに改行が入ってしまいます。このスペースや改行を抜くにはどのようにすればよろしいのでしょうか? ご教授御願い致します。

  • 正規表現でHTMLタグの属性まで選んで抽出

    現在、掲示板をPHPで作っています。 入力された文字列の無効化と許可タグの分別に正規表現を使いたいと考えております。 そこで、現状では、まずすべての < > を特殊文字に変換し、その後に、許可タグ(属性)のタグを < > にもどそうとしています。 たとえば、fontタグならcolorとsizeを許可しようとして、次のような正規表現を作ってみましたが、うまくいきません。 /&lt;font((( )*(color=)[\"\']?.{1,7}[\"\']?)|(( )*(size=)[\"\']?.{1,2}[\"\']?))*&gt;/i 正規表現はまだ勉強し始めたところで、おかしなところだらけだと思いますが、何かヒントだけでもいただけたらと思います。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • フォームの太字を置き換える

    更新記録CGIみたいなものを改造しようとしています。 文章の一部に太字を入れたいと思っています。 入力・修正画面ではフォーム内で<B></B>と出れば良いですが、表示部分でそのまま出ると駄目ですよね。 そこで置き換えようと思ったのですが、うまく出来ません。 $com1 = ~ s/&lt;B&gt;/<B>/g; $com1 = ~ s/&lt;/B&gt;/</B>/g; とすると、$com1の内容が表示されなくなります。(他の部分は正常に表示している) 両方をコメントアウトすると、「&lt;B&gt;」と表示されます。 こういう場合、どのようにしたら良いのでしょうか?

    • ベストアンサー
    • Perl
  • HTML上での入力フォームについて

    HTML上での入力フォームについて質問です input で入力する欄が100個以上あるのですが、どこを入力し終わったのかわからない状態で困っています。 input で入力した際に、入力したりしたら背景色をかえてユーザーに 「ああ、これは入力済みなんだな。」 とわかってもらえるようにするには、どうしたら良いでしょうか?

    • ベストアンサー
    • HTML

専門家に質問してみよう