文字列を作る::JavaScriptでのおはなし
出題編
alert(<>ABC</>); //firefox
alert(/ABC/.source);
alert(String.fromCharCode(65,66,67));
alert(String.fromCharCode(0x41,0x42,0x43));
CSRFのMLで登場した、(シングルやダブル)クォートを使わずに文字列を作る試み。このほか、documentオブジェクト,locationオブジェクトあたりから既にに存在している文字列をひっぱってきて加工するあたりもネライめ。
上記の解とは別の解があることに気がついたので、日記に書いてみます。
IE6とFirefoxとOperaとで共通の書き方でできました。
var x = "またきてね";
$userdata //ここでxの中身を書き換えます。
alert(x);
上記のように、$userdataがあって自由に書けるとき、「こんにちは」とalertさせましょうという遊びです。
条件は、<、>、"、'、/、を使わない、fromCharCode()も使わない・・・です。おっと、charsetはShift_JISで固定です。
また、locationなど、他から文字列を拝借せずに、$userdataで生成してください。
しばらくしたら答えを書きます。
追記:回答例が出始めたので私なりの解を以下に書いておきます。別解随時募集中。
回答例編
ほんの一例ですから!私なら$userdataとして以下をつっこみたいところです。
for ( x in { こんにちは : 0 } ) { }
みなさんの回答(トラックバックなどから)
金床さん。
( http://www.jumperz.net/index.php?i=6&threadId=64261193501866671 )
x = unescape( escape( x ).substring( 0, 2 ) + 3053 )
- unescape( escape( x ).substring( 0, 2 ) + 3093 )
- unescape( escape( x ).substring( 0, 2 ) + 30 + (107).toString(16) )
- unescape( escape( x ).substring( 0, 2 ) + 3061 )
- unescape( escape( x ).substring( 0, 2 ) + 30 + (111).toString(16) )
素晴らしい!
でも、「は」が作れませんね。そうなると%をくくりだして、足し算しちゃう。これ大事ですね。私の回答例そのままでは、たとえばURLに登場する一部の文字が作れませんので、発展系としてescapeなりunescapeなりを上手に使いつつ切り飛ばしてくっつけて、と考えていました。
「%」の切り出し方は金床さんにならうとして、「<」とかを表現したければ、m=28;var H3C=x.toString(16);としておいて、escapeすれば良いですね。同様に、「は」でも行けるかと。
長谷川さん。 あはは。ツボは私のとおんなじ。breakとか複雑かも。(d :id:hasegawayosuke:20071027 )
kazuhookuさん。 なるほど〜。try 〜 catch で「こんにちは」を拾うですか。びっくり。( d.id:kazuhooku:20071028 )
masaさん。
function こんにちは(){};x = こんにちは.name //Firefox限定
//Geckoベースのブラウザなら、atob, btoaを使う手もありかと。』(
おお!素晴らしい!長谷川さんによるネタ
x = prompt( x, x );
…あははははは最強。
うーん
要するに、(,),{,}、だけで結構なことができるんですよね、というのが。 ちょっと前に日記に書いたJavaScriptエスケープの記事の時に、メールをいただいていましてですね、「alert(0)」ぐらいしかできないんでしょ?危険視する必要がありますか?
という感想をもらいましたので、ない頭をひねってみました。