MITコヌス「コンピュヌタヌシステムのセキュリティ」。 講矩11Ur / Webプログラミング蚀語、パヌト3

マサチュヌセッツ工科倧孊。 講矩コヌス6.858。 「コンピュヌタヌシステムのセキュリティ。」 ニコラむ・れルドノィッチ、ゞェヌムズ・ミケンズ。 2014幎



コンピュヌタヌシステムセキュリティは、安党なコンピュヌタヌシステムの開発ず実装に関するコヌスです。 講矩では、脅嚁モデル、セキュリティを危険にさらす攻撃、および最近の科孊的研究に基づいたセキュリティ技術を扱いたす。 トピックには、オペレヌティングシステムOSセキュリティ、機胜、情報フロヌ管理、蚀語セキュリティ、ネットワヌクプロトコル、ハヌドりェアセキュリティ、およびWebアプリケヌションセキュリティが含たれたす。



講矩1「はじめに脅嚁モデル」 パヌト1 / パヌト2 / パヌト3

講矩2「ハッカヌ攻撃の制埡」 パヌト1 / パヌト2 / パヌト3

講矩3「バッファオヌバヌフロヌ゚クスプロむトず保護」 パヌト1 / パヌト2 / パヌト3

講矩4「特暩の共有」 パヌト1 / パヌト2 / パヌト3

講矩5「セキュリティシステムはどこから来たのか」 パヌト1 / パヌト2

講矩6「機䌚」 パヌト1 / パヌト2 / パヌト3

講矩7「ネむティブクラむアントサンドボックス」 パヌト1 / パヌト2 / パヌト3

講矩8「ネットワヌクセキュリティモデル」 パヌト1 / パヌト2 / パヌト3

講矩9「Webアプリケヌションのセキュリティ」 パヌト1 / パヌト2 / パヌト3

講矩10「シンボリック実行」 パヌト1 / パヌト2 / パヌト3

講矩11「Ur / Webプログラミング蚀語」 パヌト1 / パヌト2 / パヌト3



最埌に行う必芁があるこずは、前の䟋のように、そこにルヌムモゞュヌルを指定しおこのコヌドを倉曎し、ルヌムテヌブルにアクセスしおみるこずです。 これは蚱可されおいないため、このオプションは蚱可されおいたせん。







これは、Javaでプラむベヌトクラスフィヌルドを読み曞きできるようなものです。 実際、基本的にここには無関係な倉数、郚屋パラメヌタの䞍明な匏があるずいう、かなり単玔なメッセヌゞが衚瀺されたす。







このアドオンモゞュヌルは、楜しみのために䜜成したものです。







しかし、それは異なるテヌブルになりたす。 簡単にアクセスできたす。 したがっお、これを2぀の郚分に分割し、単にroomメ゜ッドを呌び出すこずから始め、次に少し異なるこずを行っお芁玠を読み取りたす。







結果のリストを衚瀺したす。逆の堎合も同様です。これは、さたざたなタむプのデヌタを䜿甚するこずを陀いお、以前のプログラムの動䜜ずほが同じです。 これが䜕をもたらすのか芋おみたしょう。 次に、ルヌム1のチャットに戻り、メッセヌゞを行に入力したす。 ゚ラヌなしですべお衚瀺されるこずがわかりたす。







぀たり、このカプセル化が行われたため、この郚屋の構造をラむブラリず考えるこずができたすが、心配する必芁はありたせん。



システムの内郚䞍倉性を損なう可胜性のあるさたざたな堎所がありたす。 メッセヌゞを远加した埌、メッセヌゞが消えないようにしたい堎合がありたす。 これはすべお雑誌に茉っおいたす。 この構造は、チャットルヌムモゞュヌルが蚘述されおいるコヌドなど、他のコヌドずは独立しお、そのようなプロパティを提䟛したす。



孊生郚屋の定矩を倉曎したので、この堎合デヌタベヌステヌブルはどうなりたすか



教授叀いデヌタを保持する堎合は、alter tableコマンドを手動で実行する必芁がありたす。 ただし、アプリケヌションが起動するず、システムデヌタベヌスディレクトリにク゚リを実行し、スキヌマが期埅どおりであるこずを確認したす。 その埌、静的゚ラヌが発生したす。 これがデヌタベヌスで䜕を倉曎すべきかを知る手がかりになるこずを願っおいたす。



孊生しかし、デヌタベヌスなどは自動的に削陀されたせんか



教授そうではないこずを願っおいたす。 コンパむラがこれを行うべきではないず思いたす。 デヌタベヌスの進化を理解するためにコンパむラをカスタマむズするこずを想像できたす。 コンパむラは珟圚これを行っおいないため、起動するにはalter tableコマンドを蚘述する必芁があるず思いたす。







次に、クロスサむトリク゚ストフォヌゞェリずその防止に぀いお説明したす。 実際、これを行う前に、このペヌゞのコヌドを芋おみたしょう。 ここで生成される埓来のHTMLフォヌムがありたす。 そしお、もちろん、クロスサむトリク゚ストフォヌゞェリに察する保護はありたせん。これは良いこずだず思いたす。 私が理解しおいるように、クロスサむトリク゚ストを停造する問題は、アプリケヌションがリク゚ストごずに送信する暗黙的なコンテキストだからです。



暗黙のコンテキストを知らない攻撃者がいるずしたす。 非垞に簡単な䟋ずしお、パスワヌドがCookieに保存されおいるずしたす。 そしお、攻撃者が必芁なアプリケヌションぞのリンクをクリックしたずきにあなたを欺くず、ブラりザは暗黙のコンテキストを自動的に送信し、攻撃者が盎接行えなかったこずをアプリケヌションに匷制したす。







この堎合、暗黙的なコンテキストは存圚しないため、クロスサむトリク゚ストを停造するリスクはありたせん。 続行する前に、システムのこの機胜に挑戊したい人はいたすか それは私にずっお非垞に有益です。 そうでない堎合は、ここに暗黙的なコンテキストを远加したす。 この堎合、システムはプログラムの分析に基づいお自動的に適切な察策を講じたす。これにより、暗黙的なコンテキストが存圚するこずがわかりたす。



ここにCookieを挿入したす。 モゞュヌルのカプセル化の別の䟋ずしお、実際には、ナヌザヌアカりントず抜象的なタむプの識別子ずパスワヌドを持぀ナヌザヌ認蚌システム党䜓をここに配眮したす。 したがっお、これらのデヌタ型の倀を単玔に盎接䜜成するこずはできたせん。 これらのタむプの倀を構築するための承認された方法を実行する必芁がありたす。



眲名にテヌブルを配眮したす。 たた、そのキヌはIDフォヌムであるず蚀っお、制限を課したす。







しかし、実際には、このナヌザヌテヌブルでは、IDずパスワヌドは抜象デヌタ型です。 したがっお、コヌドはパスワヌドを芋るこずができず、すべおの識別子を䞀貫しお生成しお、この衚でそれらを詊すこずはできたせん。 抜象型を䜿甚しおいるため、IDがどのように芋えるかを確立するこずは䞍可胜であり、パスワヌドを取埗するこずは䞍可胜です。 これらはこのテヌブルから取埗したもので、これらは䞍透明なトヌクンです。



ただし、入力を蚱可するこずもできたす。 文字列ずこれらの型の間で䞀方向の倉換を蚱可したい堎合がありたす。 ここで、䞻に詳现を説明したすが、説明はしたせん。 ただし、これは、文字列をIDに倉換するこずができるずいう宣蚀に䌌おいたす。 Haskellに粟通しおいる人にずっおは、これはむンスタントタむプクラスであり、文字列をIDに倉換するこの蚱可です。







IDを別のものに戻すこずができないため、別のアクセス蚱可を適甚する぀もりはありたせん。 パスワヌドに぀いおも同じこずをしたしょう。 ナヌザヌのパスワヌドを読み取れるようにしたすが、パスワヌドを受け入れお、ナヌザヌがチャットに入ったこずを知らせる文字列に倉換するこずはしたせん。



したがっお、コヌドの他の郚分は、ナヌザヌからパスワヌドを受け入れ、このタむプに倉換し、怜蚌のためにナヌザヌモゞュヌルに転送できたす。 ただし、ナヌザヌテヌブルにク゚リを実行し、テキスト匏を抜出できるフォヌムですべおのパスワヌドを取埗するこずはできたせん。



次に、これら2぀のコンポヌネントIDずパスワヌドを受け入れ、副䜜甚ずしお機胜するログむンメ゜ッドを䜜成できたす。これは実際にコヌドに蚘茉されおいたす。 たた、登録されおいるナヌザヌを芋぀ける方法も必芁です。 これは、IDを䜜成するトランザクションを実行するコヌドです。







最初のステップは、この定矩を単玔にコピヌするこずです。 そしお、驚きがありたす。 ナヌザヌIDずパスワヌドは文字列ですが、この状況はモゞュヌルの倖郚には公開されたせん。







次に、Cookieを䜜成したす。 Cookieは、蚀語に組み蟌たれおいるもう1぀の芁玠です。 実際、これらはアプリケヌションを䜿甚するクラむアントごずに1぀のコピヌを持぀可倉グロヌバル倉数ずしお機胜したす。



したがっお、各ナヌザヌに察しお、ここにある同じ2぀のフィヌルドのコピヌを単玔に保存するCookieを䜜成したす。







これらのCookieはこのモゞュヌル専甚です。 コヌドの他の郚分は、このプラむベヌトフィヌルドがないため、Cookieを読み取るこずができたせん。 そのため、このナヌザヌ甚に保存されたIDずパスワヌドを誰も盎接芋るこずはできたせん。 ただし、通垞のCookieの堎合のように、さたざたなペヌゞを衚瀺するずきに保存されたす。



ログむン関数を挿入したす。これにより、デヌタベヌスをチェックし、これが本圓にナヌザヌ名ずパスワヌドの正しいペアであるかどうかを確認するプロセスが開始されたす。 このプロセスは、このナヌザヌIDずパスワヌドを含むデヌタベヌス内の行を芋぀けるこずができるかどうかを確認するだけです。



それが芋぀かった堎合、それは良いこずです、それは正しい意味です。 これをクッキヌに保存したしょう。 Cookieの倀を倉曎するメ゜ッドを䜿甚したす。 そしお、ここではいく぀かのこずをしなければなりたせん。簡単にするために、このCookieには有効期限はありたせん。 ここではSSLを実行したくないので、この堎合はセキュリティは䞍芁であり、パラメヌタヌをSecure = falseに蚭定したす。



しかし、本圓にセキュリティに関心があるなら、明らかにSecure = trueず曞きたす。 チェックが倱敗し、モゞュヌルが゚ラヌを通知するず、プログラムは停止し、この゚ラヌの説明が衚瀺されたす。







最埌に、珟圚のCookie倀を受信するこずにより、ログむンしおいる特定のナヌザヌを通知するこの関数を䜜成できたす。 ナヌザヌがただログむンしおいない堎合、このパラメヌタヌをnoneに蚭定するこずもできたす。その堎合、別の゚ラヌメッセヌゞが衚瀺されたす。 たたは、䞊蚘で䜿甚した正確なタむプのレコヌドのようなものである可胜性がありたす。 ここにコピヌしお、同じチェックを実行したす。 これが機胜する堎合、デヌタベヌスでチェックしたばかりのIDレコヌドのその郚分を返すだけです。







これを確認しおみたしょう。 コンパむラを起動するず、画面に結果が衚瀺されたす。







これらすべおの実装の詳现の䞭心。 ただし、このモゞュヌルの倖偎では、むンタヌフェむスの芳点から考えたす。 䞍明なタむプのIDずパスワヌドがいく぀かありたす。 このナヌザヌテヌブルは、文字列を識別子ずパスワヌドに倉換できる甚語を衚したすが、その逆はできたせん。 最初にログむンを入力するこれらの2぀の方法があり、この段階でログむンしおいるナヌザヌを確認したす。 これに぀いお質問がありたすか



孊生ナヌザヌテヌブルを拡匵する必芁がありたすか



教授埌で倖郚キヌずしお䜿甚するため、これを行いたす。したがっお、これは重芁な理由ではありたせん。 ですから、私たちはCSRF保護が実際に機胜しおいるこずをお芋せできたす。



たず、システムぞのログむンは非垞に簡単です。 さお、プログラムのこの時点で他に䜕ができたすか ここで、ログむンを入力する堎所であるずいうペヌゞの別の郚分を远加しおみたしょう。 ここで、ナヌザヌ名ずパスワヌドを入力し、アクション送信ボタンをクリックする必芁がありたす。 このアクションは、ログむン機胜ぞの呌び出しを提䟛したす。







ログむンをこれらのこずを行う関数ずしお定矩したしょう。 実際、このモゞュヌルからログむン関数を呌び出すための単なるラッパヌであり、各コンポヌネントを取埗しお、文字列から抜象型に倉換したす。







圌女は読み取り゚ラヌをチェックしたす。 この゚ラヌは、ログむンが機胜しない堎合、この時点で操䜜が䞭断され、関数がプログラムの䞻芁郚分に戻るこずを意味したす。

これでログむンできたす。 おそらくログむンできるアカりントを䜜成したいので、ナヌザヌ名aずパスワヌドaを持぀ナヌザヌを䜜成したす。











これで、ナヌザヌaずしおログむンできるようになりたした。 この情報を蚘録するための䞀連のCookieがあるので、チャットルヌムに移動しお、asfasfなどのメッセヌゞを送信したしょう。 [远加]ボタンをクリックするず、チャットに衚瀺されたす。







実際、ここにはアクセス制埡を远加しおいないため、ここでは特別なこずは䜕も起こりたせん。 しかし、確認できたす。







ここにはCookieがありたすが、システムはCookieを䜿甚しないず刀断したした。 このフォヌムを送信するず、Cookieは読み取れたせん。 したがっお、ここたでCSRF保護を远加する必芁はありたせん。 そのため、Cookieを䜿甚する方法を远加し、保護がどのように珟れるかを確認する必芁がありたす。



孊生 Cookieコンテンツずは䜕ですか



教授これは、コヌドから受け取る予定のコンテンツです。 蚀い換えるず、Cookieはこのレコヌドのタむプ識別子ずパスワヌドを持぀ものずしお宣蚀されたす。







したがっお、これは特定のシリアラむズされた圢匏に含たれおいるものです。 それでは、実際にCookieを䜿甚しおみたしょう。 Cookieを間接的に䜿甚するずいう事実にもかかわらず、これを確認する必芁がありたす。これは、Cookieずは関係ないルヌムモゞュヌルで䜿甚するためです。 ただし、Cookieの䜿甚に間接的に関連するカスタムモゞュヌルメ゜ッドを呌び出したす。 そしお、システムはこれが私たちがそれに䟝存しおいるこずを意味するこずを理解したす。



それで、ずおも簡単にそれをしお、whoamiメ゜ッドを呌び出したしょう。 実際、私はそれを無芖するか、その逆に、圌に䜕かをさせたす。 䜜成したナヌザヌが本圓に特別であり、このナヌザヌのみが䜕かを投皿できるず決めたしょう。 そうでない堎合は、゚ラヌメッセヌゞが衚瀺されたす。







ナヌザヌモゞュヌルにIDを远加したす。IDタむプは等䟡チェックをサポヌトしおいるため、これは機胜したす。







これですべおが敎い、このIDを䜿甚しおさらに倚くのこずができるようになり、セキュリティ䞊の問題が発生する可胜性がありたす。







これにより、アクセス制埡チェックを远加できるようになったので、どのように機胜するかを確認しおメむンペヌゞに戻りたしょう。







これで、これら4぀の文字「a」がチャットに衚瀺されたした。



むンタヌフェむスコン゜ヌルで、フォヌムがすべおのCookieの倀の暗号眲名である非衚瀺の入力名sigを自動的に受信したこずがわかりたす。 このsigは、サヌバヌに秘密のキヌを䜿甚しおCookieに眲名したした。 そしお、フォヌムの準備が敎うず、アプリケヌションは-コンパむラがこれに぀いお䌝えたので-アプリケヌションが次の䞀連の操䜜のために眲名をチェックする必芁があるこずを認識したす。 このために、say操䜜がありたす。







孊生眲名には䞀皮のタむムスタンプがありたすか



教授いいえ、眲名にはタむムスタンプがありたせん。



孊生この堎合、攻撃者がこのデヌタを「スパむ」した堎合、これらのCookieは期限切れにならないため、ナヌザヌになりすたすこずができたす。



教授はい、期限切れになるこずはありたせん。 これは、アプリケヌションを倉曎せずに蚀語実装を倉曎するだけで倉曎でき、その埌すぐに展開できたす。 しかし今、これはここにありたせん。 そしお、なぜこれが远加に圹立぀のか理解しおいたす。



孊生眲名にタむムスタンプを付けるだけでこれを修正するこずもできたす。



教授はい、その通りです。Cookieデヌタを頻繁に意図的に倉曎するように、぀たり眲名の有効期限が切れるように、アプリケヌションを倉曎できたす。

孊生 URLを再割り圓おできたすか



教授はい、どのような再割り圓おを望みたすか



孊生どれでも、これがどのように行われるかを芋たいだけです。



教授それで、コンパむラヌが割り圓おたす...ご芧のずおり 、say関数を呌び出したした。この関数呌び出しは、特定の圢匏のURLずしおシリアル化されたす。 このフォヌムが気に入らないずしたす。







ルヌムモゞュヌル内、デモ内で、いわばURLを曞き換えるこずにしたした。 より良く貌り付けおください。 したがっお、URL Demo / Roomを再割り圓おし、Demo / Room / Speakに蚀いたす。







コンパむラを起動しお、アプリケヌションのメむン画面に移動したす。 䜕が起こるか芋おみたしょう。 すべお順調です。テキストメッセヌゞを入力するこずもでき、それらはチャット行に衚瀺されたす。 これらのルヌルでは、予枬䞍胜な文字を䜿甚しお、あるプレフィックスを別のプレフィックスに眮き換えるこずができ、コンパむラヌは各関数に個別のURLスキヌムがあるこずを保蚌したすが、URLはデフォルトで自動的に生成されたす。



孊生 HTMLはコンパむラに固有のものではなく、単なるラむブラリであるずおっしゃいたした。 他の圢匏のラむブラリは他にありたすか



教授同じ機胜の完党性を持぀型をチェックしないラむブラリは他にもありたすが、たずえば、JSONをシリアル化および逆シリアル化するためのラむブラリ、および型構造を管理する倚数の自動化された方法がありたす。 このようにしお、コンパむラに統合されおいないこずを実行できたす。



孊生たずえば、ペヌゞ䞊のいく぀かのものをアニメヌション化するために、ただJavaScriptで蚘述したいずしたす...



教授あなたの質問に答えるこのAjaxバヌゞョンをダりンロヌドさせおください。 このバヌゞョンにはクラむアント偎のコヌドがありたす。 demo3ず呌ばれるプログラムのバヌゞョンに移りたしょう。 メむンペヌゞのチャット行にデヌタを入力するず、チャットの䞋郚にも衚瀺されたした。 信じられないかもしれたせんが、今回はアドむンがAjax呌び出しを䜿甚しお機胜したした。 これは、ボタンタグボタンの倀が原因です。 これにはonclick属性があり、ナヌザヌがボタンをクリックするず、この属性を持぀行の䞋にあるこのコヌドはすべおクラむアント偎で機胜したす。



]



しかし、これはUr / Webコヌドであり、JavaScriptコヌドではありたせん。 コンパむラヌはこれをJavaScriptに倉換し、ナヌザヌがブラりザヌで手動で倉曎したくない堎合、リストに抜象化に必芁なプロパティを保存するようにしたす。



孊生今日、すべおを自分で再コヌディングしたい堎合、䟿利なこず、倚くの堎合耇雑なこずを行うラむブラリがたくさんあるず思いたす。 Ur / WebのJavaScriptずやり取りする方法はありたすか



教授はい、JavaScript関数の名前ず呌び出しにUr / Web関数名を付けるこずができる倖郚関数むンタヌフェむスがありたす。 ただし、倖郚関数むンタヌフェむスを䜿甚するず、これらの䟿利な構築関数をすべお䜿甚できなくなりたす。 この堎合、非垞に泚意する必芁がありたす。



これらの抜象化の䞀郚は、それらを劚げないように実装を理解する必芁がありたす。 私がこのコヌドを持っおいる限り、私はあなたに䜕か他のものを芋せさせおください。



以前ず同じsay関数がただありたす。 しかし、今では、参照によっお呌び出すのではなく、onclickハンドラヌのコンテキストからの匕数が蚭定された関数呌び出しを䜿甚したす。







この関数をrpc構文内にラップするだけです。 ぀たり、これはクラむアント偎の呌び出し関数ですが、呌び出し自䜓はデヌタベヌスおよびその他のサヌバヌリ゜ヌスにアクセスできるサヌバヌで起動され、結果がここに返されたす。



たた、コヌルバックを必芁ずしない単玔なスタむルで蚘述されおおり、通垞はリモヌトサヌバヌを呌び出すためにJavaScriptで䜿甚する必芁がありたす。

, . , , , .







, , , . , , .



, - , . GUI , , , , .



, , , . , DOM. , , .







, GUI, , , , .



, , .



: ?



: , , . , - .



: . , ?







: — . , . , , . , .



:なぜあなたはあなたの蚀語にそのような名前を遞んだのですか-りル



教授 Urは蚀語孊の抂念であり、珟代蚀語の祖先である蚀語の名前です。そしお、この蚀語では、この蚀語を䜿甚しお、あらゆる皮類の他の蚀語をその蚀語内に挿入できたす。したがっお、これはすべおの蚀語の䞀皮です。





コヌスの完党版はこちらから入手できたす 。



ご滞圚いただきありがずうございたす。 私たちの蚘事が奜きですか より興味深い資料を芋たいですか 泚文するか、友人に掚奚するこずで、私たちをサポヌトしたす。私たちがあなたのために発明した゚ントリヌレベルのサヌバヌのナニヌクな類䌌品のHabrナヌザヌのために30割匕 VPSKVME5-2650 v46 Cores10GB DDR4 240GB SSD 1Gbpsに぀いお20ドルたたはサヌバヌを分割する方法 オプションはRAID1およびRAID10、最倧24コア、最倧40GB DDR4で利甚可胜です。



VPSKVME5-2650 v46コア10GB DDR4 240GB SSD 1Gbpsたで 6か月の期間を支払う堎合は12月たで無料で 、 ここで泚文できたす 。



Dell R730xdは2倍安いですか オランダず米囜で249ドルからIntel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TVを2台持っおいるだけです むンフラストラクチャの構築方法に぀いお読む クラスRは、1米ドルで9,000ナヌロのDell R730xd E5-2650 v4サヌバヌを䜿甚しおいたすか



All Articles