이 블로그 게시물에서는 Node.js 및 React.js를 중심으로 OTP(일회용 비밀번호) 우회 공격을 효과적으로 방지하는 방법을 설명하지만 다른 기술에도 적용할 수 있습니다. OTP 구현을 보호하기 위한 기술과 모범 사례를 자세히 설명합니다.
OTP 우회 공격의 이해
OTP 우회는 애플리케이션 취약점을 악용하여 유효한 OTP 없이 무단 액세스를 얻는 것입니다. 공격자는 유효하지 않거나 만료된 OTP를 사용하거나 API 응답을 조작(종종 Burp Suite와 같은 도구 사용)하여 OTP 확인을 우회할 수 있습니다. 일반적인 공격에는 합법적인 사용자의 유효한 응답을 가로채서 무단 액세스에 재사용하는 것이 포함됩니다.
응답 조작 방지
단순히 API 응답을 암호화하는 것만으로는 충분하지 않습니다. 암호화(AES 또는 RSA 사용)는 전송 중인 데이터를 보호하지만 모든 사용자에 대한 동일한 응답은 취약점을 생성합니다. 암호화를 사용하더라도 성공/실패 기준이 HTTP 상태 코드 또는 일관된 성공 메시지("OTP가 성공적으로 확인되었습니다")만을 기반으로 하는 경우 공격자는 캡처된 성공 응답을 재생하여 OTP 확인을 계속 우회할 수 있습니다.
강력한 솔루션: 고유 응답 ID
해결책에는 각 요청에 대해 고유한 사용자별 식별자를 생성하는 것이 포함됩니다. 이는 응답 재생 공격을 방지합니다. 설명된 방법은 데이터베이스 사용을 방지합니다.
클라이언트측 구현(React.js 예):
rsid
)를 생성합니다. 적합한 임의 ID 생성 방법을 사용할 수 있습니다.rsid
를 포함합니다.rsid
을 서버로 보냅니다.rsid
를 요청 헤더로 보낸 것과 비교하세요. 일치는 성공적인 확인을 나타냅니다. 불일치는 공격 시도를 의미합니다.<code class="language-javascript">const OnSubmit = async () => { let data = await AesEncrypt(form); let verifyobj = { "encdata": data }; let getid = await makeid(7); let config = { headers: { "rsid": getid } }; let ApiCallverify = await axios.post("http://localhost:4000/api/verifyotp", verifyobj, config); let decryptedData = await Aesdecrypt(ApiCallverify.data.dataenc); if (ApiCallverify && ApiCallverify.data.dataenc && ApiCallverify.status === 200) { if (decryptedData.rsid === getid) { alert(decryptedData.message); } else { alert("Invalid User"); } } else { alert(decryptedData.message); } };</code>
서버측 구현(Node.js 예):
rsid
헤더가 있는지 확인하세요.rsid
을 포함합니다.<code class="language-javascript">const OnSubmit = async () => { let data = await AesEncrypt(form); let verifyobj = { "encdata": data }; let getid = await makeid(7); let config = { headers: { "rsid": getid } }; let ApiCallverify = await axios.post("http://localhost:4000/api/verifyotp", verifyobj, config); let decryptedData = await Aesdecrypt(ApiCallverify.data.dataenc); if (ApiCallverify && ApiCallverify.data.dataenc && ApiCallverify.status === 200) { if (decryptedData.rsid === getid) { alert(decryptedData.message); } else { alert("Invalid User"); } } else { alert(decryptedData.message); } };</code>
입증된 효율성: 블로그 게시물에는 Burp Suite를 사용하여 응답을 가로채고 수정하는 성공적인 로그인 및 실패한 시도를 보여주는 스크린샷이 포함되어 있습니다. 고유한 rsid
은 성공적인 재생 공격을 방지합니다.
이미지는 원래 위치를 유지합니다. 이미지 URL은 보존됩니다. 이를 올바르게 표시하려면 시스템이 해당 URL에 액세스할 수 있어야 합니다.
위 내용은 응답 조작을 통한 OTP 우회 방지를 중지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!