FC2ブログ
にゃろぐ
PCとかF1とか
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

jQueryのtext()は文字実体参照をアンエスケープして取得している
ぐぐってもなにも情報が出てこないことなんですが、常識なのかなぁ
ものすごくハマりました。
以下のhtmlをコピペして表示してみてください。


<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function(){
alert("&lt;".charCodeAt(0));
alert($("div#test").text().charCodeAt(0));
});
</script>
</head>
<body>
<div id="test">&lt;</div>
</body>
</html>


やっていることは一回目のアラートは&lt;の一文字目の文字コードを、二回目のアラートはdiv#testのテキストを取得して一文字目の文字コードを表示しています。
一回目は&の文字コード38が返ってきます。
二回目のアラートもdiv#testのテキストは&lt;で同じなので38が返ってくるはずですが!
結果はなんと60、 < の文字コードが返ってくるのです。
つまりjQueryのtext()は文字実体参照を勝手にアンエスケープして取得しているわけです。

ちなみにval()でも同じようにアンエスケープされています。
html()ではアンエスケープされないようです。

jQueryの挙動というよりtextContentやinnerHTMLの挙動だと思いますが、知っておかないとXSS対策に穴が開くことになりかねません

テーマ:webサイト作成 - ジャンル:コンピュータ

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
http://nyaalog.blog111.fc2.com/tb.php/30-f883ee4f
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

toshi

Author:toshi
FC2ブログへようこそ!



最近の記事



最近のコメント



最近のトラックバック



月別アーカイブ



カテゴリー



里親募集



ブログ内検索



RSSフィード



リンク

このブログをリンクに追加する





上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。