WebプログラミングでGoを安党に䜿甚する

この蚘事は、コヌドでWebアプリケヌションを䜜成するための安党な芁件に準拠するためにGoプログラミング蚀語を孊習し始めおいる開発者向けに曞かれおいたす。 この蚘事では、Webプログラマヌが残す可胜性のある脆匱性ず、暙準ラむブラリを䜿甚するか、すでに実蚌枈みのサヌドパヌティ゜リュヌションを䜿甚しお修正する方法に぀いお説明したす。







Goプログラミング蚀語はかなり新しいプログラミング蚀語です-2007幎にGoogleによっお開発され、2009幎に正匏に導入されたした。 プログラマヌはこの蚀語が本圓に奜きでしたコンパむル枈み、マルチスレッド、構造化、呜什型。 Microsoft、GitHub、Cloudflare、Heroku、Vkontakte、Mail.Ruなどの䌁業で䜿甚されおいたす。 蚀語のリリヌス盎埌に、Goでの開発を支揎するラむブラリずツヌルが登堎し、匕き続き䜜成されたした。 Webアプリケヌションを保護するためのラむブラリもこれらのツヌルに含たれおいたす。 個々の開発者によっお曞かれた倚くのラむブラリも、ラむブラリの暙準セットに組み蟌たれおいたす。



以䞋は、サむトに察する最も䞀般的な攻撃方法ず、それらを回避するか、少なくずもこれらの脅嚁を最小限に抑える䞻な方法です。

  1. セッションIDの予枬倀資栌情報/セッション予枬。
  2. クロスサむトリク゚ストフォヌゞェリCSRF。
  3. クロスサむトスクリプティングXSS。
  4. クリックゞャッキング。
  5. SQLステヌトメントの泚入SQLむンゞェクション。


これらの皮類の攻撃から保護するためのツヌルの抂芁。



セッションずCookieを正しく保護する


セッションは、認蚌を必芁ずせずにWebサヌバヌにアクセスするために䜿甚できるため、ハッカヌにずっお明確なタヌゲットです。 そしお、セッションの適切な実装がサヌビス党䜓を危険にさらす可胜性があるこずが刀明したした。 Webサヌビスでセッションを䜿甚する堎合は、 ゎリララむブラリが圹立ちたす。 Gorillaのセッションは、サヌバヌぞのCookieの保存に察凊するのに圹立぀だけでなく、単に䞀意のトヌクンを転送したす。 さらに、 SecureCookieラむブラリが圹立぀堎合がありたす。 そのようなセキュアCookieは、HMACを䜿甚しお倀が怜蚌されるため、停造できたせん。

最近、 JSON WebTokensテクノロゞヌも非垞に頻繁に䜿甚されおいたす。 jwt-goラむブラリはこれを支揎したす。 GoのJWTの詳现に぀いおは、 こちらをご芧ください 。



CSRF


次に、サむトに察するクロスサむトリク゚ストフォヌゞェリたたはCSRF攻撃ずの戊いを怜蚎したす。 CSRF攻撃は、このアプリケヌションの脆匱性を䜿甚しお、Webアプリケヌションの蚱可されたナヌザヌに察しお実行されたす。 たずえば、攻撃者はリンク付きの手玙を送信するこずで悪意のある操䜜攻撃者のアカりントぞの送金やパスワヌドの倉曎などを実行する特別に準備されたサむトにナヌザヌを匷制的に移動できたす。 この攻撃を実行するには、リク゚ストが送信されたサヌバヌで被害者を認蚌する必芁がありたす。 CSRF攻撃を防ぐには、特別な秘密鍵を生成しおナヌザヌのセッションに保存し、この秘密鍵に基づいお、特定のルヌルに埓っおトヌクンを生成したす。 トヌクンは、䞀方ではキヌずは異なるように特に、䞀方のキヌには倚くのトヌクンが存圚する可胜性がある、他方ではこのキヌに基づいお生成されたかどうかをトヌクンで簡単に確認できるように䜜成されたす。 2015幎、研究者のMikhail FirstovはYotaのWebサむトで同様の脆匱性に遭遇したした。 最近、倚くのマむクロ゜フトサヌビスでcsrfの脆匱性を発芋したこずで、1人の英囜の研究者に 13,000ドルがもたらされたした。 これは、開発者がこの問題をただ十分に解決しおおらず、垞に胜力があるずは限らないこずを瀺唆しおいたす。

NoSurfラむブラリはGoで非垞に良い仕事をしおいたす。 ラむブラリの䟋ずしお、プログラムコヌドを瀺したす。







ご芧のずおり、リク゚ストのコンテキストに基づいお、トヌクンが圢成され、その埌、必芁なフィヌルドずヘッダヌに挿入されたす。







゜ヌスパッケヌゞhtmlをダりンロヌドしたす。







芁求フォヌムでトヌクンを倉曎しようずするず、サヌバヌぱラヌ番号400 BadRequestを返したす。



同様のGojiCSRFラむブラリも芋぀けたした。 SecureCookieを䜿甚しおすぐに動䜜し、32バむト長のトヌクンを生成したす。 デヌタを倉曎できるリク゚ストでのみ機胜し、安党なhttpメ゜ッドGET、HEAD、OPTIONS、TRACEでは機胜したせん。

ほが同じですが、簡易モヌドでのみ、暙準のGo XSRFtokenラむブラリを生成できたす。 funcGenerateずfuncValidの2぀の機胜だけでなく、トヌクンの有効期間を蚭定する機胜もありたす。



Xss


XSS攻撃たたはクロスサむトスクリプティングは、Webシステムが発行するペヌゞに悪意のあるコヌドを導入するこずで構成される、Webシステムに察する攻撃の䞀皮です。 最も有名な䟋は、攻撃者によるナヌザヌCookieのハむゞャックです。

私の意芋では、子音の名前を持぀非垞に優れたラむブラリがこのケヌスのために曞かれたした。 これはブラック フラむデヌずブルヌモンデヌです。 ラむブラリはすぐにセットアップでき、䟿利に実行できたす。 圌らは䞀緒にそしお別々に働くこずができたす。 圌は、コン゜ヌルから行を受け取り、特定の文字を゚スケヌプし、単玔にそれをワむプする単玔なプログラムのコヌド䟋を瀺したした。 攻撃の実装に䜿甚できるJSスクリプトの䟋をいく぀か取り䞊げたした。 プログラムの䟋を以䞋のスクリヌンショットに瀺したす。フィルタヌされたシヌケンスがタグの間に衚瀺されたす
<p></p>
      
      







プログラムコヌド







2぀のラむブラリを䞀緒に䜿甚した結果の結論







そしお、䜕らかの理由で突然サヌドパヌティのラむブラリを䜿甚したくない堎合は、「すぐに䜿える」には、html /テンプレヌトパッケヌゞに含たれる䟿利な機胜がいく぀かありたす。



•funcHTMLEscapew io.Writer、b []バむトは、朜圚的に危険な文字を゚スケヌプシヌケンスで眮き換えお、バヌゞョンbをwに送信したす。

•funcHTMLEscapeStrings stringstringは、朜圚的に危険な文字を゚スケヌプシヌケンスに眮き換えおバヌゞョンsを返したす。

•funcHTMLEscaperargs ... interface {}文字列は、朜圚的に危険な文字を゚スケヌプシヌケンスに眮き換えお、倚くの匕数の文字列を圢成したす。



たた、入力パラメヌタヌはSanitizingを簡単に「クリア」できたす。 このラむブラリのgithubには、同じOWASPからの入力を䜿甚したかなり完党なテストがありたす。



クリックゞャッキング


Clickjackingずしお知られる攻撃もありたす。 クリックゞャッキング攻撃により、ハッカヌは「蚪問者に代わっお」被害者のサむトをクリックするこずができたす。これは、ナヌザヌむンタヌフェむスのなりすたしずも呌ばれたす。 したがっお、ハッカヌはさたざたなシナリオを考え出し、たずえば、数回クリックするだけで、モバむルバンクからアカりントに送金できたす。 奇劙なこずに、 DBOリモヌトバンキングシステムでも同様の脆匱性が芋぀かっおいたすが 、バンキングシステムは通垞のWebアプリケヌションよりもはるかに優れた保護が必芁ず思われたす。



たた、保護のために、サヌバヌからの各応答にX-Frame-Optionsヘッダヌを添付するこずをお勧めしたす。 珟圚、最新のブラりザはすべおX-Frame-Optionsヘッダヌをサポヌトしおいたす。 ペヌゞがフレヌムで開かれおいる堎合、ペヌゞの衚瀺を有効たたは無効にしたす。 ヘッダヌには3぀の意味がありたす。

•SAMEORIGIN-フレヌムで開かれたドキュメントのレンダリングは、最䞊䜍のドキュメントが同じドメむンからのものである堎合にのみ実行されたす。

•拒吊-フレヌム内のドキュメントのレンダリングは犁止されおいたす。

•ALLOW-FROMドメむン-このドメむンからの倖郚ドキュメントの堎合、レンダリングを蚱可したすSafari、Firefoxではサポヌトされおいたせん。



Goでの応答ヘッダヌの远加の実装䟋。







Secureは、サヌビスの安党なパラメヌタヌを䟿利に蚭定するための小さなレむダヌです。 Secureは、暙準パッケヌゞnet / httpだけでなく、倚数のフレヌムワヌクでも機胜したす。



SQLむンゞェクション


SQlむンゞェクションは、ク゚リぞの任意のSQLコヌドの導入に基づいお、デヌタベヌスを操䜜するサむトおよびプログラムをハッキングする最も䞀般的な方法の1぀です。

Goでは、パラメヌタヌ化されたク゚リ、たたは他に準備された匏ず呌ばれるものを䜿甚できたす。 SQLむンゞェクションに関するいく぀かの問題を回避するのに圹立ちたす。







正芏衚珟フィルタリングを䜿甚するこずもできたす。 この堎合、idずuidの数字のみを含む䜜業リンクを䜿甚したす。 Goでこれをどのように矎しく行うかの䟋です。







特定の文字の゚スケヌプを䜿甚したす。 たずえば、䞀重匕甚笊。







プログラムの出力。 文字「»」が文字列「»」に眮き換えられおいるこずがわかりたす。

ただし、sql-injectionを実装するずきは、匕甚笊を付ける必芁がないこずも忘れないでください。 倉数vuln1にはこの行が含たれおいるだけで、EscapeString関数を通過しおもたったく倉化したせん。







SafeSQL



SafeSQLはGo甚の静的コヌドアナラむザヌであり、SQLむンゞェクションを芋぀けるこずができたす。



おわりに


Goはかなり新しいプログラミング蚀語であるずいう事実にもかかわらず、コミュニティは急速に成長しおおり、ほがすべおのプロゞェクトに芋られる基本的な゜リュヌションを実装しおいたす。 Webアプリケヌションセキュリティに基づく゜リュヌションを含みたす。 この蚘事では、SQLむンゞェクション、CSRF、XSS、クリックゞャッキングを回避する方法を怜蚎したした。 䞊蚘の方法は、Webアプリケヌションの完党なセキュリティの䞇胜薬ではありたせん。 しかし、情報セキュリティに関連する基本的な問題のほずんどを解決するのに圹立ちたす。



䞭叀文孊



https://learn.javascript.ru/csrf

https://nvisium.com/blog/2014/11/26/developing-secure-applications-with/

https://astaxie.gitbooks.io/build-web-application-with-golang/content/en/09.1.html

https://learn.javascript.ru/clickjacking

http://0xdabbad00.com/2015/04/18/go_code_auditing/

http://dghubble.com/blog/posts/json-web-tokens-and-go/



All Articles