Xét đoạn code sau:

export function checkToken(userSupplied) {
  const account = account.retrieveToken(userSupplied)
  if (account) {
    if (account.service.token === user.service.token) {
      return true
    }
  }
  return false
}

Giả sử token mà user truyền vào là d và token lưu trong database là abc. Do toán tử so sánh thực hiện trên từng ký tự, câu lệnh if thứ 2 sẽ false ngay lập tức khi ký tự đầu tiên không khớp. Tuy nhiên, nếu như user truyền vào ab, câu lệnh if thứ 2 sẽ không trả về liền. Dẫn đến, sẽ có một độ trễ nhất định để ứng dụng so sánh xong ký tự đầu và so sánh ký tự thứ 2.

Attacker có thể tận dụng độ trễ này để tìm ra giá trị chính xác của token và đây được gọi là timing attack.

Resources