2017-07-13 6 views
0

この状況が起こる可能性はありますか?私は、あなたが宣言した関数がクライアント上で上書きされ、関数とその機能をバックエンドに移すことができると教えてくれたからです。架空の状況:フロントエンドの交換機能

javascriptでconst関数を宣言しています)。クライアント側でその関数を使ってページをレンダリングします(node.js/react.js/etcを使用)。クライアント側でクライアント側で関数を上書きすることが可能なので、Webアプリケーションで他の関数を呼び出す/不要な宛先/ URLにリダイレクトすることができますか?

+3

var foo = 'bar'; function doSomething() { console.log(foo); } // evil script doSomething = function() { window.location = 'http://evil.com' } 

しかしIEFEでコードをラップすることによって、あなたはそれが難しい外からあなたの機能を上書きすることができます;ユーザーはクライアント上で何かを行うことができます。 – SLaks

+1

です。そのため、あらゆる場所で認証チェックを設定しています。現在のユーザーが正当なユーザーであるかどうか、自分が行っていることを許可されているかどうかを確認する必要があります。 – hansTheFranz

+1

@SLaks - はい、そうかもしれませんが、答えが単純過ぎるようです。 1つは、クライアント上でjavascriptのみを書き直すことができます。恐ろしく安全でないコードを書いていない限り、アプリケーションは他の関数を呼び出すことも、他の誰かの不要な宛先にリダイレクトすることもできません。 –

答えて

0

コードを変更している開発者ツールや悪意のあるスクリプトを挿入している人が心配ですか?

これらのツールは非常に洗練されているため、開発者用ツールを使用してコードをダイビングしているユーザーから身を守ることは困難です。ただし、変更内容はタブを開いたままにしてページを更新しない限り変更されません。これは他者に危険を課すものではありません。あなたのコードを読んでいる人がいらっしゃらない場合は、それをサーバに配置する前に、まずコードを読み込み、あいまいな操作を実行してください。

悪質なコードが懸念される場合は、可能な限りグローバルネームスペースを少しでも公開することをお勧めします。それはあなたが取ることができる簡単な措置です。

この例では、簡単にスクリプトによって上書きすることができます:はい

(function() { // use an IEFE to wrap your code here 
    var foo = 'bar'; 

    function doSomething() { 
     console.log(foo); 
    } 
)(); 

// evil script 
doSomething = function() { // this function will not be called in your code 
    window.location = 'http://evil.com' 
} 
0

まあ、はい。ユーザーは、ブラウザで実行中のものを自由に変更することができます。 Chromeの開発ツールを開いて、ページ上の任意のものを変更できます。もちろん、それは彼らのブラウザだけです。

ブラウザで行われた検証は、サーバーで検証する必要があります。 JavaScriptの検証は、ユーザーの便宜のために行う必要があります。どんなログイン情報も一方向、client-> serverだけ送るべきです。ユーザーがJavaScriptで生成されたリンクを変更したい場合は、その選択肢です。本当に必要な場合は、サーバー上で生成されたリンクを変更できます。

関連する問題