Contents

CSRF , SSRF , XSS 有關網頁安全小記

最近看到相關網頁安全東西
XSS,CSRF 我也比較長看到
但是 SSRF 就沒什麼聽過
筆記筆記

找到資訊

無相關小記

有時間找到再補充

2019-07-01

最近用 CI 做 CSRF
在頁面 form 和 ajax 做 CSRF
PS: $config['csrf_protection'] = TRUE; 設定
方法是用data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>'
但在 SPA 做 CSRF 就會遇到 token 過期
因為 CSRF token 只能用一次
這個一不小心就踩到的問題

codeigniter 使用 CSRF Token 含 AJAX 驗證 – Bryce’S Note
網路找幾個方案

  1. Cookies 來抓 CSRF,因為 CSRF 是從 cookies 那邊設定
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
$(function() {
  $("#btn").click(function() {
    $.ajax({
      type: "POST",
      url: "/ajax", //ajax接收的server端
      data:
        $("#form").serialize() +
        "&csrf_test_name=" +
        getCookie("csrf_test_name"),
      success: function(data) {
        alert(data.msg);
      },
      dataType: "json"
    });
  });
});

function getCookie(name) {
  var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
  if (arr != null) return unescape(arr[2]);
  return null;
}

Codeigniter 開啟 csrf protection 時 傳送表單(or ajax) | [lifeIs: tooShort to: waste]

Laravel AJAX 解法

先說說一般用法
@csrf

1
2
3
$.ajaxSetup({
  headers: { "X-CSRF-TOKEN": "{{ csrf_token() }}" }
});
1
<meta name="_token" content="{{ csrf_token() }}" />

再用 js

1
2
3
4
5
$.ajaxSetup({
   headers: {
       'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
   }
});
  1. 從 cookie 那邊得來 CSRF,跟上面 CI 方法很像,異曲同工之妙。
1
2
3
4
5
$.ajaxSetup({
  headers: {
    "X-XSRF-TOKEN": $.cookie("XSRF-TOKEN")
  }
});

我同事有找到一篇,先打 ajax 取 csrf,在發送表單…
不過我們都覺得不優 XD

PS: Laravel 會把 CSRF 寫在 XSRF-TOKEN

讓我們來談談 CSRF - Huli’s blog 備份圖
Laravel 中 Ajax 调用时的 CSRF 对策 – 目光博客
CSRF 保护 |《Laravel 5.5 中文文档》| Laravel China 社区
codeigniter 使用 CSRF Token 含 AJAX 驗證 – Bryce’S Note

AXIOS 搭配用 Laravel AJAX 免設定

axios/axios: Promise based HTTP client for the browser and node.js

1
2
3
4
 // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token
xsrfCookieName: 'XSRF-TOKEN', // default
// `xsrfHeaderName` is the name of the http header that carries the xsrf token value
xsrfHeaderName: 'X-XSRF-TOKEN', // default

設定 axios,可以不需要設定 CSRF
前端套件幫你處理了 XD

我覺得有空來實作看看

2019-07-05

今天看到

講到

  • Synchronizer Token Pattern ( STP )
  • Double Submit Cookie

其中的"某些 CSRF 防禦"特指 Double Cookie Submit。(雙 Cookie 遞交認證,指的是在 GET 參數及 HTTP 請求中同時包含一個隨機的字符串,如果服務器判斷 GET 參數和 Cookie 參數相等,那麼沒有受到 CSRF 攻擊)由於這是 OWASP 欽定的防禦方法,人們往往會忽略 IE Cookie 漏洞對其的繞過。
IE 的一個通用 Cookie 跨域漏洞 - 知乎

這個寫得很清楚是什麼意思

我覺寫得不錯!!