[PHP-users 31308] Re: \記号のエスケープについて

Mihashi pml_384 @ yahoo.co.jp
2007年 1月 23日 (火) 15:35:17 JST


三橋です。


今回の現象についてですが
須山様から、ご回答いただいていた上記のurl_rewriter.tagsの設定を修正することで
防ぐことができました。ありがとうございました。

>エスケープ内容
>1.inputタグの値部分の\記号
>  『\』⇒『"\"』
>2.aタグのhref部分の\記号
>  『\』⇒『"\?PHPSESSID=値"』

1.url_rewriter.tagsの[input=src]を外す
2.url_rewriter.tagsの[a=href]を外す



>session.use_cookies をオンに出来ない状況と言う前提
の部分で気付けばよかったのですが、
初期画面(セッションスタートを最初にしている画面)でのみ起こっていた原因は、
初期時のクッキー情報にPHPSESSIDがないため、
透過的なセッションIDの付加によるエスケープが起こっていたようです。

※ブラウザのクッキーをブロックした状態では、初期画面でなくても同じ現象が起きました。


ただ今回の動きは正しくないような気がします。
というのも、サンプルで示したソースをブラウザで受信されたソースで確認すると
エスケープされているのは、JavaScriptで記載している部分のみです。
<FORM>タグ内の<INPUT>タグ、<A>タグともエスケープされません。
また、JavaScript部分の<INPUT>部分のエスケープですが、src属性でない部分で起こっています。
url_rewriter.tagsでしているタグ内での\記号が何らかの誤認識をしているような気がします・・・

※PHP Version 4.2.3 でおこりました。
// サンプル
<?php
Session_Start();
$rtnStr = <<< RTN_STR
<HTML>
<HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
    <TITLE></TITLE>
    <SCRIPT language="JavaScript">
    <!--
        function chg(typ){
            if( typ == 1 ){
                lineStr = "<INPUT type='text' name='In_Text' value='tst'>"
                        + "<A href='javascript:chg(2)'>CLEAR</A>";
            }else if( typ == 2 ){
                lineStr = "<INPUT type=\"text\" name=\"In_Text\" value=\"\">"
                + "<A href=\"javascript:chg(1)\">SET</A>";
            }
            document.getElementById( 'TEST' ).innerHTML = lineStr;
        }
    //-->
    </SCRIPT>
</HEAD>
<BODY>
    <FORM name="MainForm" method="post">
        <INPUT type="hidden" name="ChrSetChkStr"  value="雀の往来">
        <TABLE width="505" border="0" cellpadding="0" cellspacing="0">
            <TR>
                <TD ID="TEST">
                    <INPUT type="text" name="In_Text" value="">
                    <A href="javascript:chg(1)">SET</A>
                </TD>
            </TR>
        </TABLE>
    </FORM>
</BODY>
</HTML>
RTN_STR;

echo( $rtnStr );

?>
///////////



沢山の方からの意見を頂けて、本当に助かりました。
ありがとうございます。今後も、宜しくお願い致します。

以上

--------------------------------------
Start Yahoo! Auction now! Check out the cool campaign
http://pr.mail.yahoo.co.jp/auction/



PHP-users メーリングリストの案内