のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,646,683人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

元スレ+ JavaScript の質問用スレッド vol.78 +

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
851 : Name_Not - 2010/06/16(水) 16:09:43 ID:??? (+8,-19,-4)
クロージャでメモリリークってIEだけですか
852 : 834 - 2010/06/16(水) 16:17:47 ID:??? (+4,-30,-130)
>>840
<input type="buttpn" value="チェック" id="check_<?php echo $id ?>">
ってしておいて、
jQuery(function($){
$('#check_1').click(function(){/* 1の時の処理 */});
$('#check_2').click(function(){/* 2の時の処理 */});
});
853 : Name_Not - 2010/06/16(水) 16:30:45 ID:??? (+61,+29,-39)
>>803>>837みたいなクロージャ使えって話と
それに反応してメモリリークの話がループしてるな
IEのクロージャによるメモリリークは完璧ではないけど大体直ってるんだよ。
http://d.hatena.ne.jp/zorio/20070626/1182875782
http://d.hatena.ne.jp/zorio/20070918/1190135017
ちなみに、>>825はアウトっぽいね
855 : Name_Not - 2010/06/16(水) 20:47:49 ID:DFs81B0t (+50,-30,-281)
JSONPで機密情報を扱う際のセキュリティについて質問させてください。

Cookieによるログイン認証済みであれば機密情報をJSONPで返すAPIを作っています。
機密情報は特定のドメインでだけ利用できるようにしたいので以下のように実装してみたのですが、
これで第三者に悪用される危険性はなくなったと言えるでしょうか?

JSONPの中身
(function(){
  if (location.hostname.match(/\.allow\.example\.com$/)) {
    callback(JSONデータ);
  }
})();

ダメだとしたら、どういう場合に問題が起きるのか教えてください。
ただし、データ利用側にXSS脆弱性などはないものとします。
よろしくお願い致します。
856 : Name_Not - 2010/06/16(水) 20:51:50 ID:??? (+62,+29,-46)
メモリリークって本来はブラウザ側がうまく扱うものなんですか?うまくやってないブラウザがおかしいんですか?
それともうまくやってるブラウザは親切でやってくれてるだけでスクリプト書いてる個々人が気をつけてうまく書かないといけないものなんですか?
857 : Name_Not - 2010/06/16(水) 21:05:49 ID:??? (+15,-7,+0)
リーク箇所による
860 : Name_Not - 2010/06/16(水) 22:27:53 ID:??? (-6,-29,-65)
>>859
仮にHTTPSでログイン認証して、
Cookieでログイン状態をキープするってことなら、
そもそもlocation.hostnameなんていらなくない?
861 : Name_Not - 2010/06/16(水) 22:37:59 ID:??? (+65,+29,-16)
>>859
>特定のドメイン
と書いてあってscriptにも判別コードが書いてあったから一応いっておいた。
(認証を受けた人がやろうと思えば特定のドメイン以外で利用可能ということ。)
862 : Name_Not - 2010/06/16(水) 23:13:24 ID:??? (-17,-29,-72)
>>861
ログイン認証時に特定のドメインかどうかのフラグを立てておいて、
Ajaxで使うサーバサイドスクリプトで
データへのアクセス権限を指定すればいいんじゃないの?
>>858も言ってるけど、
location.hostnameは偽装可能で意味をなさないから、
JavaScriptでふるいにかける意味がない。
863 : 837 - 2010/06/16(水) 23:31:57 ID:PlphhQq3 (-5,+29,-116)
>>838
スコープチェインによってi=4を参照して4をアラートにあげるということがよくわかりました。
ただ、思った通りの動作をさせるためにどのようなコードを書いたら良いのかわかりません。
また、>>804-805であげているコードを見たのですが
for文の後に無名関数と引数?などがあり何をしているのかがいまいち読めません。
何を調べたら良いでしょうか?
864 : Name_Not - 2010/06/16(水) 23:42:02 ID:??? (+57,+29,-20)
求めてるのとは違うかもしれないけど、DOMそのものに値を保持させる方法もあるよ。
865 : Name_Not - 2010/06/16(水) 23:47:24 ID:??? (+57,+29,-19)
DOMにしなければいけない理由はなんでしょうか。
ザクレロじゃだめなんでしょうか?
866 : Name_Not - 2010/06/16(水) 23:50:25 ID:??? (-1,-19,-16)
DOMは廃止か
867 : Name_Not - 2010/06/16(水) 23:55:16 ID:??? (+6,-30,-127)
>>863
function generateCallback(param) { return function() { alert(param); } }

for (var i = 0; i < 3; i++) {
$("div#" + i).click(generateCallback(i));
}

ループ毎にスコープを作ればいい
スコープを作るには関数呼び出しをすればいい
868 : 855 - 2010/06/17(木) 00:32:13 ID:ckaLz0IY (+0,+29,-70)
>>860
第三者のサイトにこのAPI呼び出しが仕込まれてしまうと、
そのサイトにログイン認証済みのユーザーが訪れた際に
機密情報が渡ってしまうわけです。
それを防ぐ手立てを考えております。
869 : Name_Not - 2010/06/17(木) 00:40:29 ID:??? (-6,-29,-15)
つSame-Originポリシー
870 : 855 - 2010/06/17(木) 00:41:04 ID:ckaLz0IY (+13,+30,-169)
>>861
>(認証を受けた人がやろうと思えば特定のドメイン以外で利用可能ということ。)
それは確かにそうなのですが、今回の機密情報というのはそのユーザーに関わる情報なので、
当の本人が自分の意思で第三者のサイトにデータを漏洩させたとしても、
何ら問題はないと考えております。

今回問題だと考えておりますのは、機密情報にアクセスする権利のない第三者が、
正規のユーザーを陥れることによって機密情報を盗み出すことができるかどうか
ということです。
もし、それ以外にもセキュリティホールになりうる事象があれば
ぜひお教えいただきたく思います。
871 : Name_Not - 2010/06/17(木) 00:50:58 ID:??? (+10,-29,-64)
JSONP とは (はてなより)
>ただし、Same-Originポリシーが存在しないため、機密情報をAPIに含める際には十分な注意が必要である。

ぐぐれば答えすぐ出てるのになんでググらないんだ?
http://gihyo.jp/dev/serial/01/web20sec/0003?page=2
872 : 855 - 2010/06/17(木) 00:57:21 ID:ckaLz0IY (-16,-29,-236)
>>862
ちょっと理解できなかったのですが、ちょっと背景を整理させて頂きますと
・私のサイトでは、ログイン認証機能(セッション管理にはCookieを利用)と、
 ログイン認証済みの場合に機密情報を出力するJSONP APIを提供しています。
・このJSONP APIを利用したいのは、サービス提携している別ドメインのサイトです。
 ※そのためXHRは利用できず、JSONPでデータ提供しようと考えました。

>Ajaxで使うサーバサイドスクリプトで
と仰っているところから、もしかするとXHRによるデータ取得を想定されているのかと
想像したのですが、もし違っていたらすみません。
873 : 855 - 2010/06/17(木) 01:23:43 ID:ckaLz0IY (+43,+30,+0)
>>871
はい、まさしくその問題についての対応を考えております。
提示して頂いたサイトも読んだのですが、リファラチェックは同サイトにも
ある通り完全性がなく論外です。

また、クエリストリングに推測不可能な文字列を含めることで不正利用を防ぐ、という方法を取った場合、
その文字列を生成するのは提携サイト、評価するのは私のサイトということになります。
すると、その文字列が正しいかどうかを確認するために、別途Web APIなどで通信しなければならなくなりますし、
何よりその文字列にユーザーを紐付けることができないため、確実性が保証できません。
つまり、ユーザーAが正規の方法によって取得した秘密の文字列を、ユーザーAが運営するサイトで使用すれば
ユーザーBの情報を抜くことができてしまうわけです。
これは秘密文字列に有効期限を設けることによってある程度防げますが、100%ではありません。

もし、私が >>855 に書いた方法によって確実に漏洩を防ぐことができるのならば、
それに越したことはないと考えたわけです。
874 : Name_Not - 2010/06/17(木) 01:32:12 ID:??? (+62,+29,-7)
それで大丈夫!
心配しなくて良いよ!

どんどん漏えいさせてくださいね!!
875 : Name_Not - 2010/06/17(木) 01:32:25 ID:??? (+70,+29,-99)
>リファラチェックは同サイトにもある通り完全性がなく論外です。
え、そうなの?
XSS対策でここを見て弾くような実装はあるし、
それはリファラが(ユーザが自分で偽装しようと思わなければ)
信頼できる値だからだと思ってたけど。
876 : Name_Not - 2010/06/17(木) 01:54:38 ID:??? (+69,-1,-30)
jsonp発行する前にサーバーサイドでチェックすりゃいいじゃん
877 : 855 - 2010/06/17(木) 01:55:59 ID:ckaLz0IY (+8,+29,-39)
>>874
もし冷やかしでなく本当に漏洩の危険があるのであれば
どういった場合に漏洩するのか教えてください。
よろしくお願いします。
878 : 855 - 2010/06/17(木) 02:02:23 ID:ckaLz0IY (+14,+29,-164)
>>875
一部のセキュリティソフトはリファラを出力しないようにしてしまうため、
そういったユーザーはリファラでアクセス元を確認することができないのです。

リファラは第三者が偽装できない情報のため(昔Flashで偽装できる脆弱性があったそうですが)、
取得さえできれば確実な確認手段として利用することができます。
しかしながら、前述のようにリファラを送信しないユーザーもおり、
そういう意味で補助的にしか利用できないわけです。
879 : 855 - 2010/06/17(木) 02:06:28 ID:ckaLz0IY (+4,+29,-11)
>>876
サーバーサイドでということは私のサイト側でということになるかと思いますが、
何をチェックすればよいかお教え頂けるでしょうか?
880 : Name_Not - 2010/06/17(木) 02:14:25 ID:??? (+26,-30,-17)
>>855
String.prototype.match=function(){return true;};
初歩レベルな
881 : Name_Not - 2010/06/17(木) 02:30:34 ID:??? (+10,-30,-123)
ちなみに、Chrome/Safari/Opera限定で
location.__defineGetter__('host',function(){return 'hage'});// location.host -> hage
とか、Firefoxならwatchでやりたい放題とか色々あるよ。
883 : 855 - 2010/06/17(木) 02:38:21 ID:ckaLz0IY (+81,+29,-121)
>>881 >>880
すみません、881さんの書き込みを読む前に882を送信してしまいました。

ブラウザによってはlocation.hostnameなどの値まで書き換えられてしまうのですか!
これは全く思いもよりませんでした。
システム値を変更できるなんて、もはやセキュリティホールではないかとすら
思えてしまいます・・・。

もはや望みはほとんどありませんが、その方法を持ってしても破れないチェックを
SCRIPT側のみで実装することは考え得りませんでしょうか?

どうぞよろしくお願い致します。
884 : Name_Not - 2010/06/17(木) 02:41:39 ID:Ki4ACcUD (-15,-30,-102)
(HTML板より誘導されて来ました)

結果(値)の出力フォームで質問です。
OS:WinXP,ブラウザ:Firefox3.6.3,サクラエディタ使用

JavaScriptで例えば、 ver xA = 3; ver xB = 2; として ver xC = xA + xB;
としたとき、xCをブラウザのフォーム(テキストフォーム?) [ ] 内に出すには
どうすれば良いのでしょうか?
入力はinputタグの例が見つかりましたが出力の方が見つかりません。
885 : Name_Not - 2010/06/17(木) 03:39:04 ID:??? (+127,+29,-74)
>>883
そもそもユーザがそのページを保存して自サーバに置いて
hosts書き換えてアクセスしたらアドレスバーの値なんて何の役にも立たないから
>>876の言う通りサーバ側で何かしら判断するべきじゃない?
リクエスト毎に動的なハッシュをhtmlに埋め込んでおいてそれが一致した時だけ値を返すとか。

>>884
入力の時に参照したvalueに今度は値をつっこめばいい
886 : 880 - 2010/06/17(木) 03:49:12 ID:??? (+89,+29,-86)
>>885
それはお前がお前のデータにアクセスできるって話でしかなく、お前が俺のデータにアクセスできるって話ではない
一言でいうと、885の書いてることを理解できてないよ
>>883
孫iframeでのクロスドメイン通信とか。IEでクリック音が出るって問題とかあるけど。
887 : 885 - 2010/06/17(木) 03:54:14 ID:??? (+106,+29,-45)
>>886
あれ?どっか読み間違えた?
自分が許す特定のハッシュ持ってるリクエストにだけレスポンス返すのだと何でダメなんだっけ?
888 : 880 - 2010/06/17(木) 03:57:19 ID:??? (-28,-29,-20)
855だった。まあ伝わるよね。
>>882
ちなみに、
if (location == 'http://allow.example.com/xxx')
なら大丈夫だった気がする。いや、本職の人からするとザルかもしれんけど。
889 : 880 - 2010/06/17(木) 04:02:24 ID:??? (+106,+29,-6)
>>887
ああ、ごめん。ハッシュについては間違ってないよ。
ただ、それについては>>873で言及されてるでしょ。
890 : 885 - 2010/06/17(木) 04:11:03 ID:??? (+70,+29,-138)
>>889
あぁ、なるほど。読みのがしてたわ。jsonp使ってるページは自分のサーバではなかったのか。

つか、>>872で言ってる通りセッション管理をCookieでやってるならJSONPのリクエストの時もそれ見たらいいって話じゃないのか
認証が自分のドメインならJSONPの時もCookie飛ばしてくるし。
891 : 880 - 2010/06/17(木) 04:39:24 ID:??? (+63,+30,-172)
いや、だからさ…
機密情報を扱うサイトAとBがあって、AからBにJSONPなどで情報を渡したいわけよ。
でも、実際にJSONP使うと全然関係ないサイトXから同じようにJSONPでその機密情報にアクセスできるわけでしょ。
クラッカーは自分のサイトXにトラップを仕掛けておいて、サイトAの利用者が訪れるのを待っていれば、
アクセスがあったときにトラップが発動して何も知らない訪問者の情報を盗めるでしょ。
アクセスしてるのは訪問者自身だからCookieは正規のものだけど、情報を掠め取るのはサイトXになるからCookieは役に立たないよ。
893 : 884 - 2010/06/17(木) 12:34:10 ID:??? (+49,-30,-47)
>>885
下記で試しましたが、「xC」とフォームに表示されます。
<form>
<input type="text" value=xC>
</form>

あと、「入力の時に参照したvalue」の意味が分かりません。
(数値はJavaScriptで定義しています)
894 : Name_Not - 2010/06/17(木) 12:59:32 ID:??? (+29,-30,-23)
<input type="text" value="def" id="t">
<script>
document.getElementById("t").value="change"
</script>
895 : Name_Not - 2010/06/17(木) 13:11:26 ID:??? (+52,+29,-2)
おまえがアホって事はよくわかったよ
896 : Name_Not - 2010/06/17(木) 15:04:25 ID:??? (+64,+29,-15)
>>893-894
レベル低すぎ。ここは手取り足取り教えるとこじゃないから。
参考サイトで駄目なら入門書籍を読むべきだと思うね。がんばって。
897 : 884&893 - 2010/06/17(木) 15:17:41 ID:??? (+56,+24,+0)
>>894
できました。
有難うございます。
899 : Name_Not - 2010/06/18(金) 13:03:09 ID:??? (+96,-30,-49)
document.imlink.src = "";
これでnameがimlinkのsrcを書き換えることは出来たのですが、
aタグのhrefを書き換えるにはどうしたらよいでしょうか?
document.alink.href = "http://example.jp";
これだとうまくいってないようです。
900 : Name_Not - 2010/06/18(金) 13:45:26 ID:??? (+50,+22,+0)
ブラウザによっては駄目だよね。ブラウザ書いてないけどさ。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について