私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.121 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
まずエスケープする所は、ユーザーが入力した文字。
固定値はエスケープしないで出力しても安全。
これがサーバーサイドの常識。
クライアントサイドでも同じで、
innerHTMLに固定値を代入するときは
何の問題も起きない。リスクもない。
固定値はエスケープしないで出力しても安全。
これがサーバーサイドの常識。
クライアントサイドでも同じで、
innerHTMLに固定値を代入するときは
何の問題も起きない。リスクもない。
お前が意味のないコード書いてるだけ。
意味があることだけやれや
過保護やろう
意味があることだけやれや
過保護やろう
ママーこわいよ。ヒューマンエラー怖いよー
リスクがー、リスクがー。
バグかいても、動くコードかいてー
リスクゼロじゃなきゃだー
リスクがー、リスクがー。
バグかいても、動くコードかいてー
リスクゼロじゃなきゃだー
innerHTMLに代入する文字が
固定の文字列ならリスクゼロだよw
固定の文字列ならリスクゼロだよw
>>255
innerHTMLを選択する理由もゼロになるな
innerHTMLを選択する理由もゼロになるな
innerHTML君はいい加減、黙ってくれないかな
言いたいことは全ていっただろうに、いつまで続けるというのか
言いたいことは全ていっただろうに、いつまで続けるというのか
>>258
> いつまで続けるというのか
え? それ言っておかないとダメ?
反論する人がいる限り叩き潰しに来るし、
この話題が出るたびに再登場するよ。
ちゃんと、いつまで続けるか言ったので
今度から聞かないでね。
> いつまで続けるというのか
え? それ言っておかないとダメ?
反論する人がいる限り叩き潰しに来るし、
この話題が出るたびに再登場するよ。
ちゃんと、いつまで続けるか言ったので
今度から聞かないでね。
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
と書こうとして、ちょっと眠くてうっかりして手が滑って
innerHTML = '<table id="tbl"><tr><td class="first"><script>alert(1)</script>なんとか</td></tr></table>';
って書いてしまったらどうするんだ!
ねーよw
なんとかの部分を可変にしてほしいという変更依頼があったらどうする?
>>262
エスケープする。サーバーサイドの常識(笑)だろ
エスケープする。サーバーサイドの常識(笑)だろ
エスケープするの忘れるかもしれないから
echo禁止。ユーザーが入力したものを表示するの禁止。
echo禁止。ユーザーが入力したものを表示するの禁止。
>>215あたりがこいつの考えの根底にあるものか
テキスト操作に拘り過ぎてDOMの概念がないんだな
テキスト操作に拘り過ぎてDOMの概念がないんだな
>>267
理由を理解できないおまえにいわれたくないわ
理由を理解できないおまえにいわれたくないわ
>>264
ネタだと思ってたらお前は絶対にサーバサイドでコード書かないほうがいいよ
ネタだと思ってたらお前は絶対にサーバサイドでコード書かないほうがいいよ
>>268
依頼がなくても最初から全部エスケープしていればいいだろ
innerHTML = escapeHTML('<table id="tbl"><tr><td class="first">なんとか</td></tr></table>');
ドヤッ!
依頼がなくても最初から全部エスケープしていればいいだろ
innerHTML = escapeHTML('<table id="tbl"><tr><td class="first">なんとか</td></tr></table>');
ドヤッ!
>>271
まさか、まだサーバーサイドで固定値をエスケープしろとか言ってんの?
echo htmlspecialchars('<table id="tbl"><tr><td class="first">なんとか</td></tr></table>', ENT_QUOTES, 'utf-8');
なるほど、こういうコード書けと。
あんた、バグってますよw
まさか、まだサーバーサイドで固定値をエスケープしろとか言ってんの?
echo htmlspecialchars('<table id="tbl"><tr><td class="first">なんとか</td></tr></table>', ENT_QUOTES, 'utf-8');
なるほど、こういうコード書けと。
あんた、バグってますよw
>>275
相手しなくていいってw
どうせお前だけだろ? 意味もなくinnerHTML使うなって言ってるのは。
俺はしっかり言った。代入するのが固定の文字列であれば
innerHTMLを使うリスクは0だ。
固定値じゃない(ユーザーが入力する文字)ならばエスケープすればいい。
さあ、反論は?
ボール投げたから、ちゃんと投げ返してね。
相手しなくていいってw
どうせお前だけだろ? 意味もなくinnerHTML使うなって言ってるのは。
俺はしっかり言った。代入するのが固定の文字列であれば
innerHTMLを使うリスクは0だ。
固定値じゃない(ユーザーが入力する文字)ならばエスケープすればいい。
さあ、反論は?
ボール投げたから、ちゃんと投げ返してね。
>>278
いや、そのコードかいたの俺じゃないし
いや、そのコードかいたの俺じゃないし
初めてだわ、場合によってサニタイズするって考えの人
LTでも勉強会でも見たことないので是非スライドシェアに投稿してほしいね
LTでも勉強会でも見たことないので是非スライドシェアに投稿してほしいね
>>276
「常にしておく」って誰かから聞いたのをそのまま言ってるだけ?
常にしておくっていうのは、変数を出力する時の話であって
固定の文字列の部分は関係ないよ。
ちゃんと理解してないで、言葉だけ覚えてるから
そういう間違いをするんだよ。
「常にしておく」って誰かから聞いたのをそのまま言ってるだけ?
常にしておくっていうのは、変数を出力する時の話であって
固定の文字列の部分は関係ないよ。
ちゃんと理解してないで、言葉だけ覚えてるから
そういう間違いをするんだよ。
>>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
あー、わかったわ。お前が何を勘違いしているのか。
全部エスケープしろって言われて、
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
>>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>';
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>';
今頃、変数の前後の固定の文字列まで含めて
エスケープしているスライドを探してるのかな?w
エスケープしているスライドを探してるのかな?w
ここらへんで、一旦まとめを書いておきますね。
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を使う理由がありません。
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を使う理由がありません。
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をうまくインストールしたいです。
エラーの原因がわかる方、いらっしゃいましたら宜しくお願いします。
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をうまくインストールしたいです。
エラーの原因がわかる方、いらっしゃいましたら宜しくお願いします。
まとめ書いたら、止まったかw
>>290
Displaying message "Unsafe JavaScript attempt to access frame with URL about:blank ...". #1068
http://github.com/n1k0/casperjs/issues/1068
これじゃね?
>>290
Displaying message "Unsafe JavaScript attempt to access frame with URL about:blank ...". #1068
http://github.com/n1k0/casperjs/issues/1068
これじゃね?
あ、こっちか?
Unsafe JavaScript attempt to access frame in 1.9.8
http://github.com/ariya/phantomjs/issues/12697
Unsafe JavaScript attempt to access frame in 1.9.8
http://github.com/ariya/phantomjs/issues/12697
次からID出すといいかもね
ID出しておくと便利で、うざいやつからの反論が無くなるらしいよ
ID出しておくと便利で、うざいやつからの反論が無くなるらしいよ
ほんとぱたっとやんだなw
やっぱりinnerHTMLを否定していたのは一人だったか。
俺も寝るから、またあしたな。
>>297
どうやらバグみたいだから
一つ前のバージョンに戻すとかしてみればいいんじゃない?
やっぱりinnerHTMLを否定していたのは一人だったか。
俺も寝るから、またあしたな。
>>297
どうやらバグみたいだから
一つ前のバージョンに戻すとかしてみればいいんじゃない?
一人で頑張るならID出したほうがいいぞ
自演を疑われるぐらいなら初めからID出したほうが信用される
後は各自で判断するだろうさ
自演を疑われるぐらいなら初めからID出したほうが信用される
後は各自で判断するだろうさ
ようやく向こうのスレが収束したわけだが
> function escapeHTML(str) {
> return str.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
> }
これは酷いな
XSSが発生するコードを披露するとは
> 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 スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.121 + (1001) - [100%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.141 + (881) - [97%] - 2021/4/19 9:00
- + JavaScript の質問用スレッド vol.129 + (926) - [97%] - 2017/7/27 13:45
- + JavaScript の質問用スレッド vol.131 + (1000) - [97%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.120 + (1002) - [97%] - 2014/11/8 1:15
- + JavaScript の質問用スレッド vol.122 + (1004) - [97%] - 2015/2/14 4:45
- + JavaScript の質問用スレッド vol.122 + (116) - [97%] - 2018/5/2 18:30
- + JavaScript の質問用スレッド vol.129 + (981) - [97%] - 2016/5/5 8:16
- + JavaScript の質問用スレッド vol.128 + (1001) - [97%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.131 + (1004) - [97%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.123 + (966) - [97%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.127 + (1001) - [97%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [97%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.126 + (952) - [97%] - 2015/11/18 13:15
- + JavaScript の質問用スレッド vol.126 + (348) - [97%] - 2023/1/12 17:00
- + JavaScript の質問用スレッド vol.125 + (1001) - [97%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.123 + (1002) - [97%] - 2015/4/27 23:30
トップメニューへ / →のくす牧場書庫について