javascript - วิธีแก้ไข tsr-detect-possible-timing-attacks การโจมตีด้วยเวลาอาจเกิดขึ้น
ฉันมีโค้ดแบบนี้:
if (!confirmPassword) {
errors.confirmPassword = DefaultValidateErrors.confirmPassword;
} else if (password && password !== confirmPassword) {
errors.confirmPassword = DefaultValidateErrors.confirmPasswordMatch;
}
tslint ได้ระบุสิ่งนี้เป็น tsr-detect-possible-timing-attacks ซึ่งฟังดูถูกต้อง แต่ฉันจะแก้ไขมันได้อย่างไร
คำตอบ #1
หากคุณอยู่ใน Node และเวอร์ชัน v6.6.0 ขึ้นไป คุณสามารถใช้โมดูล crypto ของ timingSafeEqual ได้
const crypto = require('crypto');
const isValid = crypto.timingSafeEqual(Buffer.from(password), Buffer.from(confirmPassword));
เอกสาร Node crypto
คำตอบ #2
ฉันคิดว่านี่เป็นผลบวกเท็จและคุณสามารถเพิกเฉยต่อคำเตือนลินต์ได้ กฎลินต์จะตรวจหาตัวแปรที่ชื่อ password แต่การโจมตีแบบเวลา (timing attack) จะเกี่ยวข้องเฉพาะเมื่อมีข้อมูลที่ไม่ทราบแก่ลูกค้าที่เกี่ยวข้อง เช่น เมื่อมีการตรวจสอบรหัสผ่านที่ลูกค้ากำหนดเพื่อเข้าสู่ระบบกับรหัสผ่านที่ถูกต้องที่บันทึกไว้ ดูเหมือนว่าโค้ดนี้เพียงแค่ตรวจสอบรหัสผ่านใหม่ที่ผู้ใช้ที่ผ่านการยืนยันตัวตนกำลังตั้งค่า
กล่าวได้ว่า เพื่อหลีกเลี่ยงการโจมตีด้วยเวลาเมื่อมันเกี่ยวข้อง การค้นหาเว็บพบเอกสารกฎ ซึ่งลิงก์ไปยังโพสต์ที่มีวิธีแก้ปัญหาแนะนำเพื่อเปรียบเทียบรหัสผ่านสองอันในเวลาคงที่โดยใช้การดำเนินการบิตไวส์ (คุณคิดว่าฟังก์ชันนั้นคงอยู่ในไลบรารีบางแห่ง บางทีมันอาจจะมีอยู่)
