2013-01-13 7 views
6

Javascriptでは、C++のようにプライベートなデータやメソッドをオブジェクトに渡すことはできません。ああ、実際は、そうです、閉鎖を含むいくつかの回避策を介して。しかし、Pythonの背景から来て、私は "プライバシーを偽装する"(命名規則とドキュメンテーションを介して)十分であるか、あるいは "プライバシーを強制する"(Javascript自体によって強制される)方が望ましいと考える傾向があります。確かに、私はこれが真実でない状況を考えることができます。 RTFMを使わないで私のコードと人のインタフェースが合っていますが、私は非難されますが、私はそのような状況にはありません。javascriptの「偽のプライバシー」はセキュリティ上のリスクを伴いますか?

でも何かが私に中断を与えます。 Javascriptの達人、Douglas Crockfordは、「Javascript:The Good Parts」などで繰り返し「セキュリティ」の問題として偽のプライバシーを参照しています。 For example "攻撃者はフィールドに直接アクセスして、そのメソッドを自分のものに置き換えることができます"。

私はこれで混乱しています。私が最小限のセキュリティプラクティス(検証、盲目的にブラウザから私のサーバーに送信されたデータ、自分のサイトにサードパーティ製のスクリプトを検査せずに含めないでください)を実行すると、偽装 - プライバシーは、強制されたプライバシーよりも「安全」ではありません。そうですか?もしそうでなければ、ふりをするプライバシーと強制されたプライバシーがセキュリティの意味を持つ状況は何ですか?

+0

サードパーティのスクリプトを「検査する」ことは、いくつかの種類のサイトにとって深刻な課題となります。他のサーバーからスクリプトを引き出している場合は、いつでも変更することができます。 – Pointy

+0

自分のサイトに悪質な第三者のスクリプトを含めると、強制的なプライバシーのコーディング方法を使用すると、スクリプトが引き起こす混乱を緩和することはほとんどありません。たとえば、スクリプトはページ上のHTMLの一部または全部を書き換えることができます。サーバの代わりに悪意のあるサーバにユーザのパスワードを送ることができます。 –

+0

はい私は同意します。それは "悪い"私が思うように "悪"についてそれほどではありません。広告主が敵対的ではないと想定するのは一般的に安全ですが、無能である可能性もあります。 – Pointy

答えて

0

答えは "いいえ、偽のプライバシーは問題ありません"と思われます。ここではいくつかの精緻化は、次のとおりJavaScriptで

  • それが今日存在するように、あなたがあなたのWebページ上の未知と信頼されないサードパーティのスクリプトを含めることはできません。それは大混乱をもたらすことができます。これは、ページ上のすべてのHTMLを書き換えることができ、それは彼のパスワードの入力を要求して、悪のサーバーに送信することができ、などなどJavascriptのコーディングスタイルは、この基本的な事実に違いはありません。これに対処する方法については、PleaseStand's answerを参照してください。

  • 無能が、悪ではないスクリプトは、名前の衝突による意図せずに台無しにすることがあります。これは、共通名を持つグローバル変数をたくさん作成することに対する良い議論ですが、偽のプライベート変数を避けるかどうかは関係ありません。たとえば、バナナを売っているウェブサイトでは、偽のプライベート変数window.BANANA_STORE_MODULE.cart.__cart_item_arrayを使用している可能性があります。この変数が第三者のスクリプトによって誤って上書きされることは完全に不可能ではありませんが、それは非常に起こりそうもありません。

  • 信頼できないコードが所定の方法で行動することができます制御された環境を提供するのjavascriptの将来変更ためideas floating aroundがあります。私は信頼できないサードパーティ製のjavascriptを特定の公開されたメソッドを通じてjavascriptとやりとりし、サードパーティ製のスクリプトがHTMLなどにアクセスするのをブロックすることができます。これが存在すれば、プライベート変数がセキュリティにとって不可欠なシナリオになる可能性があります。しかし、それはまだ存在しません。

  • 明快でバグのないコードを書くことは、セキュリティにとって常に明らかに役立ちます。真にプライベートな変数とメソッドが明確でバグのないコードを書くのを簡単にしたり難しくしたりする限り、セキュリティの意味があります。彼らが有益かどうかは議論と趣味の問題であろうと、あなたの背景が、C++(プライベート変数は中央)とPython(プライベート変数が存在しない)のどちらであろうと、有名なブログの投稿Javascript Private Variables are Evilを含む双方向の議論があります。私の部分については

、私は偽のプライバシー使用し続けます:先頭にアンダースコア(または何を)いくつかのプロパティまたはメソッドは、モジュールの公的サポートインタフェースの一部ではないことを私と私の協力者に指示します。私の偽のプライバシーコードは読みやすく(IMO)、私はそれを構造化する上で自由度があります(例えば、クロージャーは2つのファイルにまたがることはできません)。私は、これらのプログラムが他のどのjavascriptプログラムよりもいくらか安全性が低いと心配するつもりはありません。

1

それ自体ではありません。しかし、Crockfordが指摘しているように、信頼できないJavaScriptコードをHTMLドキュメントに安全にロードすることはできません。このような信頼できないJavaScriptコードをブラウザで実行する必要がある場合は、iframeサンドボックスを検討してください(、たとえば、ユーザーが提出したソーシャルネットワーキングサイトのウィジェットの場合は)。 Web開発者として

は、セキュリティの問題が主要なインターネット広告ブローカーが彼らの広告コードをフレーミング(あるいは prohibit)サポートしていないことが多いです。申し訳ありませんが、意図的であっても意図せずに、悪質なJavaScriptを配信しないようにGoogleを信頼する必要があります( 、たとえば)。ここで

私はanother questionへの答えとして掲載していたのiframeサンドボックスの簡単な説明です:

完全に独立したドメイン名(例:「exampleusercontent.com」)を設定し

独占ユーザーが送信したHTMLのための、CSS、およびJavaScript。このコンテンツをメインドメイン名で読み込まないようにしてください。その後、iframeを使用してページにユーザーのコンテンツを埋め込みます。

単純なフレーミングよりも緊密な統合が必要な場合は、window.postMessage()を使用すると、異なるフレームのスクリプトが制御された方法で互いに通信できるようになります。

+1

"あなたは安全にHTML文書に信頼できないJavaScriptコードを読み込むことはできません"という言葉は、これは偽のプライバシーJavaScriptコーディングとは関係がないようです。 JavaScriptのコードをどのように書くかは関係ありません。右?結局のところ、信頼できないスクリプトは、HTMLなどの一部または全部を直接書き換えることができます。 –

+0

@SteveB:はい。私の知る限り、ウェブブラウザには、スクリプトをページの特定の部分に限定するネイティブ機能(iframe以外)はありませんが、そのような機能は確実に実装できます。 「偽のプライバシー」は、本当に一度だけ対処されます。 – PleaseStand

関連する問題