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

    私的良スレ書庫

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

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

    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
    251 : Name_Not - 2014/11/10(月) 23:20:16.54 ID:???.net (+62,+29,-95)
    まずエスケープする所は、ユーザーが入力した文字。
    固定値はエスケープしないで出力しても安全。
    これがサーバーサイドの常識。

    クライアントサイドでも同じで、
    innerHTMLに固定値を代入するときは
    何の問題も起きない。リスクもない。
    252 : Name_Not - 2014/11/10(月) 23:29:15.60 ID:???.net (+52,+29,-2)
    全然常識じゃない
    253 : Name_Not - 2014/11/10(月) 23:30:55.91 ID:???.net (+57,+29,-11)
    お前が意味のないコード書いてるだけ。
    意味があることだけやれや
    過保護やろう
    254 : Name_Not - 2014/11/10(月) 23:32:53.23 ID:???.net (+57,+29,-22)
    ママーこわいよ。ヒューマンエラー怖いよー
    リスクがー、リスクがー。
    バグかいても、動くコードかいてー
    リスクゼロじゃなきゃだー
    255 : Name_Not - 2014/11/10(月) 23:34:00.59 ID:???.net (+20,-29,-46)
    innerHTMLに代入する文字が
    固定の文字列ならリスクゼロだよw
    256 : Name_Not - 2014/11/10(月) 23:37:50.05 ID:???.net (+66,+29,-17)
    たぶん「固定の文字列」がわからないんだよ
    257 : Name_Not - 2014/11/10(月) 23:37:53.79 ID:???.net (+43,+6,-13)
    >>255
    innerHTMLを選択する理由もゼロになるな
    258 : Name_Not - 2014/11/10(月) 23:40:49.79 ID:???.net (+94,+29,-24)
    innerHTML君はいい加減、黙ってくれないかな
    言いたいことは全ていっただろうに、いつまで続けるというのか
    259 : Name_Not - 2014/11/10(月) 23:41:21.39 ID:???.net (+11,-30,-118)
    >>257
    コードがシンプルになるよ。

    innerHTML = '<table id="tbl"><tr><td class="first">なんとか</td></tr></table>';

    これをinnerHTMLを使わないで書こうとすると
    複雑になるからね。つまりコストが掛かってバグを起こすリスク(笑)が高くなる。

    >>256
    なるほど。固定の文字列がわからないのか。
    上の、'<table>~</table>'のことだよ。
    値が変わらないからXSSが起きるリスクがない
    260 : Name_Not - 2014/11/10(月) 23:42:38.61 ID:???.net (+75,+30,-31)
    >>258
    > いつまで続けるというのか
    え? それ言っておかないとダメ?

    反論する人がいる限り叩き潰しに来るし、
    この話題が出るたびに再登場するよ。

    ちゃんと、いつまで続けるか言ったので
    今度から聞かないでね。
    261 : Name_Not - 2014/11/10(月) 23:45:11.98 ID:???.net (-2,-30,-155)
    innerHTML = '<table id="tbl"><tr><td class="first">なんとか</td></tr></table>';

    と書こうとして、ちょっと眠くてうっかりして手が滑って

    innerHTML = '<table id="tbl"><tr><td class="first"><script>alert(1)</script>なんとか</td></tr></table>';

    って書いてしまったらどうするんだ!


    ねーよw
    262 : Name_Not - 2014/11/10(月) 23:46:03.69 ID:???.net (+62,+29,-9)
    なんとかの部分を可変にしてほしいという変更依頼があったらどうする?
    263 : Name_Not - 2014/11/10(月) 23:46:35.70 ID:???.net (+85,+29,-2)
    ここまで低次元だという事がないな
    264 : Name_Not - 2014/11/10(月) 23:46:47.42 ID:???.net (+41,-28,-25)
    >>262
    エスケープする。サーバーサイドの常識(笑)だろ
    265 : Name_Not - 2014/11/10(月) 23:47:52.76 ID:???.net (+53,+25,-33)
    エスケープするの忘れるかもしれないから
    echo禁止。ユーザーが入力したものを表示するの禁止。
    266 : Name_Not - 2014/11/10(月) 23:48:33.81 ID:???.net (+86,+29,-4)
    変更依頼があって、そこからやるのか…
    267 : Name_Not - 2014/11/10(月) 23:49:44.45 ID:???.net (+101,+29,-36)
    >>263
    それだけ過保護が多いんだろ。
    うちの会社は馬鹿ばかりだから規則を守れ。
    理由は考えるなお前らはただ規則を何も考えずに守ってればいいんだ。
    268 : Name_Not - 2014/11/10(月) 23:50:40.06 ID:???.net (+73,+29,-12)
    >>266
    何か問題?

    低次元の人は何考えてるのかわからんので、
    ちゃんと書こうね。
    269 : Name_Not - 2014/11/10(月) 23:50:41.67 ID:???.net (+63,+29,-44)
    >>215あたりがこいつの考えの根底にあるものか
    テキスト操作に拘り過ぎてDOMの概念がないんだな
    270 : Name_Not - 2014/11/10(月) 23:51:46.19 ID:???.net (+104,+29,-4)
    >>267
    理由を理解できないおまえにいわれたくないわ
    271 : Name_Not - 2014/11/10(月) 23:52:22.74 ID:???.net (+107,+29,-6)
    >>264
    ネタだと思ってたらお前は絶対にサーバサイドでコード書かないほうがいいよ
    272 : Name_Not - 2014/11/10(月) 23:52:50.00 ID:???.net (+7,-30,-61)
    >>268
    依頼がなくても最初から全部エスケープしていればいいだろ

    innerHTML = escapeHTML('<table id="tbl"><tr><td class="first">なんとか</td></tr></table>');

    ドヤッ!
    273 : Name_Not - 2014/11/10(月) 23:53:36.23 ID:???.net (+106,+29,-51)
    >>270
    みんなお前が馬鹿だってわかってるから
    もうやめたら?w

    >>271
    へー。あんたエスケープしないんだ?
    ユーザーが入力した文字をエスケープしないんだねw
    274 : Name_Not - 2014/11/10(月) 23:55:03.18 ID:???.net (+51,-30,-70)
    >>271
    まさか、まだサーバーサイドで固定値をエスケープしろとか言ってんの?

    echo htmlspecialchars('<table id="tbl"><tr><td class="first">なんとか</td></tr></table>', ENT_QUOTES, 'utf-8');

    なるほど、こういうコード書けと。

    あんた、バグってますよw
    275 : Name_Not - 2014/11/10(月) 23:55:37.97 ID:???.net (+108,+29,-21)
    >>273
    会話のキャッチボールできないのかな?
    まともに相手してもらえなくなりますよ
    276 : Name_Not - 2014/11/10(月) 23:57:04.98 ID:???.net (+130,+29,-8)
    >>274
    逆にいちいち区別するほうが変だろ
    常にしておけばいい
    277 : Name_Not - 2014/11/10(月) 23:57:21.39 ID:???.net (+77,+29,-112)
    >>275
    相手しなくていいってw
    どうせお前だけだろ? 意味もなくinnerHTML使うなって言ってるのは。

    俺はしっかり言った。代入するのが固定の文字列であれば
    innerHTMLを使うリスクは0だ。

    固定値じゃない(ユーザーが入力する文字)ならばエスケープすればいい。

    さあ、反論は?

    ボール投げたから、ちゃんと投げ返してね。
    278 : Name_Not - 2014/11/10(月) 23:58:00.06 ID:???.net (+95,+20,-6)
    >>276
    だからバグってるだろw
    正しく動いてないだろw
    279 : Name_Not - 2014/11/10(月) 23:58:58.39 ID:???.net (+70,+29,-29)
    >>278
    いや、そのコードかいたの俺じゃないし
    280 : Name_Not - 2014/11/10(月) 23:59:13.25 ID:???.net (+57,+29,-10)
    バグっていても、リスクが0なら
    そっちの方がいいだろう?
    281 : Name_Not - 2014/11/10(月) 23:59:41.73 ID:???.net (+64,+29,-39)
    初めてだわ、場合によってサニタイズするって考えの人
    LTでも勉強会でも見たことないので是非スライドシェアに投稿してほしいね
    282 : Name_Not - 2014/11/11(火) 00:00:38.75 ID:???.net (+80,+30,-59)
    >>276
    「常にしておく」って誰かから聞いたのをそのまま言ってるだけ?

    常にしておくっていうのは、変数を出力する時の話であって
    固定の文字列の部分は関係ないよ。

    ちゃんと理解してないで、言葉だけ覚えてるから
    そういう間違いをするんだよ。
    283 : Name_Not - 2014/11/11(火) 00:02:22.99 ID:???.net (+30,+12,-3)
    え?
    284 : Name_Not - 2014/11/11(火) 00:03:44.47 ID:???.net (+52,-30,-177)
    >>281
    あー、わかったわ。お前が何を勘違いしているのか。

    全部エスケープしろって言われて、
    echoで出す文字全てをエスケープしろって思ってるだろ?

    echo htmlspecialchars('<table id="tbl"><tr><td class="first">$nantoka</td></tr></table>', ENT_QUOTES, 'utf-8');

    みたいに。

    あのね、よく聞いてね。
    みんなが言ってる「常にエスケープしろっていうのは」

    <table id="tbl"><tr><td class="first"> <?php echo htmlspecialchars('$nantoka', ENT_QUOTES, 'utf-8') ?> </td></tr></table>;

    変数の部分だけだから。

    ここまで次元が低いと、降りるまで時間がかかるわw
    285 : Name_Not - 2014/11/11(火) 00:05:44.63 ID:???.net (+5,-30,-179)
    >>284のコードを
    innerHTMLの話に戻すと

    innerHTML = '<table id="tbl"><tr><td class="first">なんとか</td></tr></table>';

    これはエスケープする必要はない。固定の文字列であり変わることがなくて安全だから。

    「なんとかの部分を変えたい」という話であれば、こう。

    innerHTML = '<table id="tbl"><tr><td class="first">' + escapeHTML(nantoka) + '</td></tr></table>';
    286 : Name_Not - 2014/11/11(火) 00:08:41.72 ID:???.net (+102,+29,-21)
    >>284
    あんたが一人で騒いでるだけだろう
    俺は>>215と書いたのに勝手に脱線してるのはお前なんだよ
    287 : Name_Not - 2014/11/11(火) 00:09:08.73 ID:???.net (+51,+23,-36)
    今頃、変数の前後の固定の文字列まで含めて
    エスケープしているスライドを探してるのかな?w
    288 : Name_Not - 2014/11/11(火) 00:10:24.93 ID:???.net (+78,+29,-43)
    >>286
    別に騒いでるのが俺だけってことでもいいよ。

    俺の言ってることが間違っていると言わないなら
    全然問題なし。

    で、固定の文字列は安全です。
    289 : Name_Not - 2014/11/11(火) 00:26:54.56 ID:???.net (+36,-30,+0)
    ここらへんで、一旦まとめを書いておきますね。

    Q. innerHTMLは絶対に使ったらダメなの?
    A. XSSが起きるような使い方をしなければ使って問題はありません。

    Q. XSSが起きる場合とはどんな時ですか?
    A. ユーザーからの入力された変数をそのまま出力するとXSSになる可能性があります。

    Q. XSSが起きないようにするにはどうすればいいですか?
    A. エスケープをしましょう。以下は例です。
    innerHTML = '<table id="tbl"><tr><td class="first">' + escapeHTML(text) + '</td></tr></table>';

    Q. escapeHTMLが使えません。
    A. 残念ながら標準では用意されていないのでライブラリを使うか自分で実装する必要があります。


    function escapeHTML(str) {
    return str.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
    }
    lodash.jshttp://lodash.com/docs#escape
    Prototype.jshttp://api.prototypejs.org/language/String/prototype/escapeHTML/

    Q. escapeHTMLと書くのが面倒です。
    A. テンプレートライブラリなどを使えば簡単にかけます。

    例 lodash
    _.template('<b><%- value %></b>', { 'value': '<script>' });
    // → '<b><script></b>'

    Q. createElementやappendChild等のDOM命令を使ったほうがいいのではないですか?
    A. 使ってもいいですがコードが冗長になります。
    安全な場合(XSSが起きない場合)は冗長にしてまでDOMを使う理由がありません。
    290 : Name_Not - 2014/11/11(火) 00:48:54.93 ID:???.net BE:734417802-2BP(6567) (+9,-30,-250)
    http://img.2ch.sc/ico/nida.gif
    casperjsをインストールして試そうとすると以下のエラーがでてうまく動かないです。

    【環境】OS:Win7pro 64bit
    【何をしたのか】
    コマンドプロンプトでcasperjsを試そうとすると以下のエラー?がでます

    【エラーメッセージ】

    C:\Users\*******>casperjs --version
    1.1.0-beta3
    Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///C:/jstools/casperjs-1.1-beta3/bin/bootstrap.js. Domains, protocols and ports must match.

    【期待する結果】
    PhantomJSとCasperJSをうまくインストールしたいです。
    エラーの原因がわかる方、いらっしゃいましたら宜しくお願いします。
    291 : Name_Not - 2014/11/11(火) 00:52:02.90 ID:???.net (+8,-30,-38)
    まとめ書いたら、止まったかw

    >>290
    Displaying message "Unsafe JavaScript attempt to access frame with URL about:blank ...". #1068
    http://github.com/n1k0/casperjs/issues/1068

    これじゃね?
    292 : Name_Not - 2014/11/11(火) 00:53:01.76 ID:???.net (+3,-30,-10)
    あ、こっちか?

    Unsafe JavaScript attempt to access frame in 1.9.8
    http://github.com/ariya/phantomjs/issues/12697
    293 : Name_Not - 2014/11/11(火) 00:53:57.57 ID:???.net (+86,+29,-8)
    早くこの辺の話終わんねえかな…
    294 : Name_Not - 2014/11/11(火) 00:55:04.54 ID:???.net (+69,+29,-12)
    >>293
    終わったよ。まとめ書いたから止まった。

    もう次の話に入ったよ。
    295 : Name_Not - 2014/11/11(火) 01:00:10.46 ID:???.net (+91,+29,-10)
    次からID出すといいかもね
    ID出しておくと便利で、うざいやつからの反論が無くなるらしいよ
    296 : Name_Not - 2014/11/11(火) 01:02:37.92 ID:???.net (+70,+29,-18)
    >>295
    昨日だったか一昨日だったかは出したんだけどね。
    今回は反論を叩きのめそうと思ったので
    あえて隠した。どっちにするかは気分次第。
    297 : Name_Not - 2014/11/11(火) 01:07:35.11 ID:???.net BE:734417802-2BP(6567) (+35,-29,-15)
    http://img.2ch.sc/ico/nida.gif
    >>291
    ありがとう
    なんとなく?読んでみたけど今のところ解決策がない感じ・・・かなぁ
    298 : Name_Not - 2014/11/11(火) 01:08:11.93 ID:???.net (+67,+29,-65)
    ほんとぱたっとやんだなw
    やっぱりinnerHTMLを否定していたのは一人だったか。
    俺も寝るから、またあしたな。

    >>297
    どうやらバグみたいだから
    一つ前のバージョンに戻すとかしてみればいいんじゃない?
    299 : Name_Not - 2014/11/11(火) 01:14:20.91 ID:???.net (+57,+29,-21)
    一人で頑張るならID出したほうがいいぞ
    自演を疑われるぐらいなら初めからID出したほうが信用される
    後は各自で判断するだろうさ
    300 : Name_Not - 2014/11/11(火) 01:17:19.19 ID:???.net (+75,-30,-55)
    ようやく向こうのスレが収束したわけだが

    > function escapeHTML(str) {
    > return str.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
    > }
    これは酷いな
    XSSが発生するコードを披露するとは
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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