CookieのSameSite属性の設定 Same Site=Lax 、もしくは Same Site=Strict の設定をすることで、クロスオリジンからのPOST等の危 険なメソッドの実行時にCookieの送信がされません。 送金や商品の購入のようなケースは防げますが、先程紹介した認証しなくても処理を実行できてしまう ケースは防ぐことはできないので、あくまで緩和策と捉えてください。
解説 60 URLクエリに含まれる文字列をそのまま出力してしまっている。 PortSwigger. Lab: Reflected XSS into HTML context with nothing encoded. https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded
解説 62 以前登録したデータがエスケープされずに保存されてしまった ため、データ取得時にスクリプトが実行されてしまっている。 PortSwigger. Lab: Stored XSS into HTML context with nothing encoded. https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded
解説 64 document.writeで書き込んでいるため、HTMLのリテラルが 破壊された。 PortSwigger. Lab: DOM XSS in document.write sink using source location.search. https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-document-write-sink
解説 74 サーバでHTMLを生成する際にURLクエリの内容をエスケープせず、HTMLに書き出してしまっている。 PortSwigger. Lab: Reflected XSS into a JavaScript string with angle brackets HTML encoded. https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-angle-brackets-html-encoded
解説 82 const db = new DB(); db.open(); const sql = `SELECT * FROM products WHERE category_name = '${category}' AND release = 1`; db.query(sql); db.close(); 以下のようなスクリプトが組まれているのではないか、と推 測できる。 categoryに’+OR+1=1+--に書き換えてリクエストすると以 下のクエリが発行される。(+はスペースの代わり) SELECT * FROM products WHERE categories = '' OR 1=1 --' AND release = 1
解説 84 1. まず、カラム数を特定するために、Nullが入ったダミーテーブルをUNIONで連結してみる。 2. カラム数が特定できたら、次にデータ型を特定するために様々なデータ型のダミーテーブルをUNIONで連結してみる。 3. データ型の特定ができたら、それに合わせてusersテーブルを取得するクエリをUNIONで連結する。 PortSwigger. Lab: SQL injection UNION attack, retrieving data from other tables. https://portswigger.net/web-security/sql-injection/union-attacks/lab-retrieve-data-from-other-tables