<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="rss.css" type="text/css"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="ja-JP">
	<channel rdf:about="http://www.tokumaru.org/d/index.rdf">
	<title>徳丸浩の日記</title>
	<link>http://www.tokumaru.org/d/</link>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tokumaru.org/d/" />
	<description></description>
	<dc:creator>徳丸浩(ockeghem)</dc:creator>
	<dc:rights>Copyright 2010 徳丸浩(ockeghem) &lt;hiroshi2007 [at] tokumaru.org&gt;, copyright of comments by respective authors</dc:rights>
	<items><rdf:Seq>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c10"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c09"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c08"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c07"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c06"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c05"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c04"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c03"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c02"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c01"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#p02"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#p01"/>
</rdf:Seq></items>
</channel>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c10">
<link>http://www.tokumaru.org/d/20100118.html#c10</link>
<dc:date>2010-02-06T08:36:32+09:00</dc:date>
<title>2010-01-18のツッコミ[10] (徳丸浩)</title>
<dc:creator>徳丸浩</dc:creator>
<description>姫さん  質問を見てみましたが、これはご本人がドコモショップに相談に行くのがよいと思います。あくまで想像ですが、のっとりなどではないような気がします。 最近は携帯電話を購入すると、必要のないコンテンツを購入させられて「いらなければ直ぐに解約してください」と言われることがよくあります。そのたぐいの話で、ショップの店員が説明していなかったとか、説明を聞き漏らしていたとか、理由は無数に考えられます。</description>
<content:encoded><![CDATA[姫さん<br><br>質問を見てみましたが、これはご本人がドコモショップに相談に行くのがよいと思います。あくまで想像ですが、のっとりなどではないような気がします。<br>最近は携帯電話を購入すると、必要のないコンテンツを購入させられて「いらなければ直ぐに解約してください」と言われることがよくあります。そのたぐいの話で、ショップの店員が説明していなかったとか、説明を聞き漏らしていたとか、理由は無数に考えられます。]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c09">
<link>http://www.tokumaru.org/d/20100118.html#c09</link>
<dc:date>2010-02-06T05:23:29+09:00</dc:date>
<title>2010-01-18のツッコミ[9] (姫)</title>
<dc:creator>姫</dc:creator>
<description>記事とは関係ないコメントですいません  http://nat-q.jp/ctg3/q_detail.php?no=10340 ユーザ同士で質問を回答するサイトの1ページなのですが iモードブラウザ2.0ブラウザによる乗っ取りなのでしょうか? 自分では判断できないので検証していただきたいです (ちがうなら、あたしの勘違いでいいのですが あたりなら実害が出ているとドコモなどへ報告していただきたいです)</description>
<content:encoded><![CDATA[記事とは関係ないコメントですいません<br><br><a href="http://nat-q.jp/ctg3/q_detail.php?no=10340">http://nat-q.jp/ctg3/q_detail.php?no=10340</a><br>ユーザ同士で質問を回答するサイトの1ページなのですが<br>iモードブラウザ2.0ブラウザによる乗っ取りなのでしょうか?<br>自分では判断できないので検証していただきたいです<br>(ちがうなら、あたしの勘違いでいいのですが<br>あたりなら実害が出ているとドコモなどへ報告していただきたいです)]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c08">
<link>http://www.tokumaru.org/d/20100118.html#c08</link>
<dc:date>2010-01-18T23:49:13+09:00</dc:date>
<title>2010-01-18のツッコミ[8] (yamagata)</title>
<dc:creator>yamagata</dc:creator>
<description>ストリームとして取得して自分で分解する方法で対応しようと思えば出来る状況だとしても、（それまでに比べて）手順がフクザツなので、「あきらめてGETを使う」に流れてしまう開発者も多そう。setRequestHeaderが少なくとも&quot;Content-Type&quot;に対しては今までどおり動作するように再改修されることが望まれますね。。</description>
<content:encoded><![CDATA[ストリームとして取得して自分で分解する方法で対応しようと思えば出来る状況だとしても、（それまでに比べて）手順がフクザツなので、「あきらめてGETを使う」に流れてしまう開発者も多そう。setRequestHeaderが少なくとも&quot;Content-Type&quot;に対しては今までどおり動作するように再改修されることが望まれますね。。]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c07">
<link>http://www.tokumaru.org/d/20100118.html#c07</link>
<dc:date>2010-01-18T22:57:50+09:00</dc:date>
<title>2010-01-18のツッコミ[7] (猪股健太郎)</title>
<dc:creator>猪股健太郎</dc:creator>
<description>ASP.NETの場合なら、HttpContext.Current.Request.InputStreamから読めると思います。</description>
<content:encoded><![CDATA[ASP.NETの場合なら、HttpContext.Current.Request.InputStreamから読めると思います。]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c06">
<link>http://www.tokumaru.org/d/20100118.html#c06</link>
<dc:date>2010-01-18T22:12:36+09:00</dc:date>
<title>2010-01-18のツッコミ[6] (金床)</title>
<dc:creator>金床</dc:creator>
<description>サーバサイドJavaの場合、ServletRequestのgetInputStreamからストリームとして取得できます</description>
<content:encoded><![CDATA[サーバサイドJavaの場合、ServletRequestのgetInputStreamからストリームとして取得できます]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c05">
<link>http://www.tokumaru.org/d/20100118.html#c05</link>
<dc:date>2010-01-18T11:56:52+09:00</dc:date>
<title>2010-01-18のツッコミ[5] (徳丸浩)</title>
<dc:creator>徳丸浩</dc:creator>
<description>Kenjiさん、コメントありがとうございます。php://inputというものがあるのですね。確認したところ、確かにデータを取得できました。</description>
<content:encoded><![CDATA[Kenjiさん、コメントありがとうございます。php://inputというものがあるのですね。確認したところ、確かにデータを取得できました。]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c04">
<link>http://www.tokumaru.org/d/20100118.html#c04</link>
<dc:date>2010-01-18T11:45:38+09:00</dc:date>
<title>2010-01-18のツッコミ[4] (Kenji)</title>
<dc:creator>Kenji</dc:creator>
<description>PHP なら、php://input でデータを取得できるのではないでしょうか？  file_get_contents('php://input');  http://www.php.net/manual/ja/wrappers.php.php </description>
<content:encoded><![CDATA[PHP なら、php://input でデータを取得できるのではないでしょうか？<br><br>file_get_contents('php://input');<br><br><a href="http://www.php.net/manual/ja/wrappers.php.php">http://www.php.net/manual/ja/wrappers.php.php</a><br>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c03">
<link>http://www.tokumaru.org/d/20100118.html#c03</link>
<dc:date>2010-01-18T10:48:19+09:00</dc:date>
<title>2010-01-18のツッコミ[3] (徳丸浩)</title>
<dc:creator>徳丸浩</dc:creator>
<description>masaさん、twkさん、コメントありがとうございます。 formのactionにパラメータ積んだら、それは実質的にGETということになりませんか? xml形式のデータをSUBMITというのは、実はやってみたのですが、PHP、ASP/ASP.NETなどではうまく受け取れていません。やり方があるのかもしれませんが、私は知りません。 </description>
<content:encoded><![CDATA[masaさん、twkさん、コメントありがとうございます。<br>formのactionにパラメータ積んだら、それは実質的にGETということになりませんか?<br>xml形式のデータをSUBMITというのは、実はやってみたのですが、PHP、ASP/ASP.NETなどではうまく受け取れていません。やり方があるのかもしれませんが、私は知りません。<br>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c02">
<link>http://www.tokumaru.org/d/20100118.html#c02</link>
<dc:date>2010-01-18T10:08:14+09:00</dc:date>
<title>2010-01-18のツッコミ[2] (twk)</title>
<dc:creator>twk</dc:creator>
<description>xml形式のデータをsubmitしたら読み取れる?</description>
<content:encoded><![CDATA[xml形式のデータをsubmitしたら読み取れる?]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c01">
<link>http://www.tokumaru.org/d/20100118.html#c01</link>
<dc:date>2010-01-18T09:57:56+09:00</dc:date>
<title>2010-01-18のツッコミ[1] (masa)</title>
<dc:creator>masa</dc:creator>
<description>formのactionに直接パラメータを積むとか？</description>
<content:encoded><![CDATA[formのactionに直接パラメータを積むとか？]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#p02">
<link>http://www.tokumaru.org/d/20100118.html#p02</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tokumaru.org/d/20100118.html#p02" />
<dc:date>2010-01-18T07:21:48+09:00</dc:date>
<title>iモードブラウザ2.0のXMLHttpRequestでPOSTデータの扱いが困難になった</title>
<dc:creator>徳丸浩(ockeghem)</dc:creator>
<description>このエントリでは、iモードブラウザ2.0の制限により、XMLHttpRequestでPOSTメソッドの利用が困難になっていることを確認したので報告する。 iモードブラウザ2.0のJavaScriptを試していて、POSTメソッドでデータが渡せていないことに気がついた。以下のようなプログラムで検証してみた。  【post.html】 html head script function test() {   try {     var requester = new XMLHttpRequest();     requester.open('POST', '/dumppost.php', true);     requester.onreadystatechange = function() {        if (requester.readyState == 4) {            onloaded(requester);        }     };     requester.setRequestHeader(&quot;Content-Type&quot; , &quot;applicatio..</description>
<content:encoded><![CDATA[<h3>iモードブラウザ2.0のXMLHttpRequestでPOSTデータの扱いが困難になった</h3><p>
<p>このエントリでは、iモードブラウザ2.0の制限により、XMLHttpRequestでPOSTメソッドの利用が困難になっていることを確認したので報告する。</p>
<p>iモードブラウザ2.0のJavaScriptを試していて、POSTメソッドでデータが渡せていないことに気がついた。以下のようなプログラムで検証してみた。</p>
<pre>
【post.html】
&lt;html&gt;
&lt;head&gt;
&lt;script&gt;
function test() {
  try {
    var requester = new XMLHttpRequest();
    requester.open('POST', '/dumppost.php', true);
    requester.onreadystatechange = function() {
       if (requester.readyState == 4) {
           onloaded(requester);
       }
    };
    requester.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
    requester.send("aaa=bbb&ccc=ddd");
  } catch (e) {
    res = requester.responseText;
    document.getElementById('result').innerHTML = e.toString();
  }
}

function onloaded(requester) {
  res = requester.responseText;
  document.getElementById('result').innerHTML = res;
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;input type=button value="go" onclick="test()"&gt;
&lt;div id="result"&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

【dumppost.php】
&lt;?php
echo "aaa=" . htmlspecialchars($_POST['aaa'], ENT_QUOTES, 'Shift_JIS') . "&lt;br&gt;";
echo "ccc=" . htmlspecialchars($_POST['ccc'], ENT_QUOTES, 'Shift_JIS') . "&lt;br&gt;";
?&gt;
</pre>
<p>実行結果は、以下のようになった。まずはChromeのものだが、IEやFirefoxでも同等の結果だ。</p>
<img class="left" src="http://www.tokumaru.org/d/images/20100118_0.png" alt="Choromeでの結果" title="Choromeでの結果" width="545" height="198">
<br clear=left>
<p>次に、ドコモP-07Aによる結果</p>
<img class="left" src="http://www.tokumaru.org/d/images/20100118_1.jpg" alt="P-07Aでの結果" title="P-07Aでの結果" width="280" height="153">
<br clear=left>
<p>ドコモの場合を検証するために、Webサーバーに来ているリクエストをキャプチャしてみた。</p>
<pre>
POST /dumppost.php HTTP/1.1
X-UE-Version: 1
Host: XXXXXXXXXXXXX
User-Agent: DoCoMo/2.0 P07A3(c500;TB;W24H15)
Content-Type: text/xml
Content-Length: 15

aaa=bbb&ccc=ddd
</pre>
<p>ご覧のようにPOSTデータそのものは送信されてきているが、Content-Typeがtext/xmlになっているために、Webアプリケーション側で受け取れないようだ。</p>
<p>JavaScript側では、この値をapplication/x-www-form-urlencodedに変更しているが、<a href="http://d.hatena.ne.jp/ockeghem/20091117/p1">P-07AでもJavaScriptが再開され、あらたな制限がみつかった</a>で報告したように、setRequestHeaderが無効化されているために、この設定が無視されていることが原因のようだ。</p>
<p>これは明らかに、setRequestHeader無効化の副作用であるが、その代償は大きいように思う。PHP以外に、ASP/ASPX、J2EE(JSP)にこのデータを入力してみたが、いずれも値を読み取ることはできなかった。一方、PerlのCGIモジュールでは、POSTDATAという名称のデータとして、POSTデータ全体を読み取ることができた。Perl以外の場合でも、Webサーバーにデータ自体は到達しているのだから値を利用する手段はあるかもしれないが、私が調べた範囲では分からなかった。</p>
<p>上記の結果として、AjaxでPOSTメソッドを扱うには、標準的でない方法を用いる必要があるわけだが、その方法を検討してみた。</p>
<ol>
<li>POSTをあきらめてGETを使う
<li>Perlのように、text/xml形式のデータを読み出せる言語を選択する
<li>DOMにより、IFRAME内にFORMを作成してSUBMITする
</ol>
<p>このうち、上記1.については、セキュリティ上の問題が発生し得る。Ajaxのセキュリティ対策として、「GETメソッドを拒絶する」という方法があるからだ。具体的には、SCRIPT要素を使ってSame Origin Policyを回避してAjaxデータを読み出す手法に対抗して、SCRIPT要素では必ずGETメソッドになることから、POSTのみを許容することで対策するという方法だ。既存のアプリケーションがこのような手法によりセキュリティ対策されている場合に、安易にGETメソッドを許容してしまうと、セキュリティホールが混入することになりかねない。</p>
<p>3.については、私が試した範囲ではうまくいっていない。JavaScriptからIFRAME内のFORM操作がうまくいかないのだ。これも、ひょっとすると制限を掛けているのかもしれない。アドホックな方法ならありそうだが、まだ十分に検証できていない。</p>
<p>一つの疑問は、このような情報がインターネット上に見あたらないことだ。AjaxでPOSTメソッドが使えないというのはとんでもないことだが、検索してもそのような情報がみあたらないのだ。iモードブラウザ2.0のAjaxを誰も使っていないのか、それとも事業者が恐ろしくて口をつぐんでいるのか。</p>
<p>しかし、このような技術情報が流通していかない限り、iモードブラウザ2.0のJavaScriptを使ったコンテンツは普及していかないだろう。NTTドコモにはさらなる情報開示を期待したいし、ケータイWebの開発者にも、もっとブログなどでの情報公開を期待する。</p>


</p>

<p><a href="http://www.tokumaru.org/d/20100118.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#p01">
<link>http://www.tokumaru.org/d/20100118.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tokumaru.org/d/20100118.html#p01" />
<dc:date>2010-01-18T07:21:48+09:00</dc:date>
<title></title>
<dc:creator>徳丸浩(ockeghem)</dc:creator>
<description></description>
<content:encoded><![CDATA[<p>



</p>

<p><a href="http://www.tokumaru.org/d/20100118.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
</rdf:RDF>
