2015-12-14 5 views
12

私はちょうどeval()機能を使用して悪いと私はコードインジェクション攻撃(ポスト:Why is using the JavaScript eval function a bad idea?)の脆弱性が1つの理由を発見使用して研究していた。Javascriptのコードインジェクションを知っているのはなぜですか?

私の質問は、私たちは必ずjavascriptのコードインジェクションについて心配する必要がありますか?なぜなら、ユーザーがWebサイトのJSスクリプトを実行したいのであれば、コンソールで実行することができます。

だから、誰かが自分のコードを自分のJavaScriptコードに挿入することができれば、それは何をする可能性がありますか?以下キョウチクトウの答えに基づいて

EDIT
我々はAJAX呼び出しを通じてブラウザとサーバ間の通信を持っているとき、私は、脆弱性の一つの方法を発見しました。それは完璧な意味合いがあります。しかし、私は、ブラウザでのみ動作し、バックエンドとの通信を持たないJavascriptプログラムを持っているかもしれません。例えば、電卓やシンプルゲームです。ここで私の補足的な質問は、これらのプログラムも脆弱にする他の理由はありますか?

+1

コードの注入は、ユーザー以外の人が行った場合に有害です。 'eval'の引数を制御するのはあなたのユーザだけですか? – Bergi

+0

私はjavascriptについて話しているときに、フォーム内の入力のみを変更できるユーザーである必要があります。私は他の方法についてはわかりません。これ以上の例はありますか? –

+0

@ TareqMahmood私は一例を掲示しました – Oleander

答えて

4

ユーザーが作成したJSON要求にハッカーがharmfullコードを挿入した場合、セキュリティ上の問題が発生します。これはevalを使用して評価されます。

次のコードは、リソースがこの

GET /get.json 
{ 
    some: "data" 
} 

のように見えます。しかし、攻撃者が、今man in the middle attack

function(){ 
    // send window.cookie to attacker 
}(); 

攻撃を使用して上記を置き換える

$.get("/get.json", function(data){ 
    var obj = eval(data) // String to javascript object 
}); 

走っていると想像ユーザーセッションにアクセスできます。

+0

ありがとうございます。私は今それについて理解しています。しかし、私の元の考えはJSベースのフロントエンドのゲームや計算機で、サーバーとの通信は一切使用していませんでした。そのプログラムにリスクの原因が考えられると思いますか? –

+0

@ TareqMahmoodベストプラクティスに従うのは常にベストプラクティスです。あなたがコーナーを切断する習慣をつくったり、可能性のあるセキュリティの影響を事前に学習していない場合は、サーバー/クライアントタイプのプロジェクトに進むときにこれらのプラクティスを続けるつもりです。 'eval()'関数はJavascriptのコンパイラにアクセスするためのもので、さまざまな状況で間違って使われます。注意してください、evalはまたパフォーマンスの低下を意味します。 –

+0

@TareqMahmood私は間違っている可能性がありますが、これは "中間攻撃の男"とは何の関係もないと確信しています。 –

2

あなたのコードがクエリ文字列から値をとり、それを評価で使用する場合、攻撃者は犠牲者に悪質なクエリ文字列を含むURLを訪問させる可能性があります。

OWASPから:

<script> 
function loadObj(){ 
var cc=eval('('+aMess+')'); 
document.getElementById('mess').textContent=cc.message; 
} 

if(window.location.hash.indexOf('message')==-1) 
    var aMess="({\"message\":\"Hello User!\"})"; 
else 
    var aMess=location.hash.substr(window.location.hash.indexOf('message=')+8); 
</script> 

攻撃者はその後、あなたはDOMベースのXSS攻撃を持っているリンクを含む電子メールを送信したり、URL

http://example.com/page.html?message=<img onerror="alert(xss)"> 

に彼らの悪質なサイトを訪問し、ユーザーをリダイレクトすることができます。

バックエンドのないゲームが、ユーザーセッションなど他の重要な情報を持つサイトにある場合、攻撃者がセッションCookieを盗んだり、資格情報を取得する可能性があります。それはすべてJavaScriptがアクセスできるものに依存します。つまり、同じオリジンポリシーがそれを制限するため、ホスティングドメインへの完全なアクセス権を持ちます。ただし、ここで他の機密アプリケーションがあると、それらが侵害される可能性があります。そうでない場合、最悪の場合、攻撃者はコンテンツを変更したり、ユーザーがサイト上で行ったことを監視したりして、ユーザーがサイトの信頼を乱用する可能性があります。

+0

意味があります。ありがとう! –

+0

しかし、ユーザー入力だけで作業する場合、私の他のポイントは、可能性のある脅威について知ることでした。私たちはクッキーに機密情報を持っているかもしれません。しかし、URLパラメータにevalを使用せず、ユーザー入力のみに使用するとどうなりますか?たとえば、ユーザーが2つの数値を入力し、eval関数を使用してそれらの間にadd/sub/mul/divを追加する電卓です。 –

+1

これは 'eval()'が受け入れられるケースの1つです。後で言いますが、permalinkの機能が特定の式に対して「example.com?calc = 4 + 4」(もちろん4 + 4のURLコンポーネントがエンコードされている)の問題になることを許可しているときです。 – SilverlightFox

関連する問題