문제

나는 다음 시나리오를 가지고 있습니다 - 그리고 내가 정말로 찾고있는 것은 실제 사람들의 진정한 도움입니다. 제안 / 솔루션? 제발.

Ex. www.foo.com (Asp.net 3.5) jQuery 1.3.2를 사용하여 default.aspx 페이지에서 ValidAteLogin pagemethods를 호출하고 있습니다 (www.foo.com/default.aspx)

코드는 다음과 같습니다

$.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: "Default.aspx/ValidateLogin",
            data: '{' + arg + '}',
            success: function(data) {
                if (data.d != 0) {
                    window.location = "http://www.google.com";
                } else {
                    alert("Invalid UserName/Password.");
                    ResetLoginForm();
                }
            },
            error: function(xhr, status, error) {
                var strerror = xhr.status + error;
                alert("Error Communicating with Server:" + strerror);
                ResetLoginForm();
            }
        });

코드는 외부 JS 파일에 저장됩니다. ex default.js의 경우.

이 웹 사이트는 공개적이므로 누구나 Default.js를 다운로드 할 수 있으므로 위에 주어진 코드를 살펴볼 수 있습니다.

내 질문은 한 번 사람 이이 URL을 얻는다 : "default.aspx/validateLogin"은 서버에 요청을 할 수 있으며 서버는 요청에 자랑스럽게 응답 할 수 있습니다.

여기 내 옵션은 무엇입니까? 요청을 어떻게 확인합니까? 이러한 종류의 무단 요청을 어떻게 방지합니까?

도움이 되었습니까?

해결책

웹 요청은 본질적으로 공개됩니다. 소스 파일을 볼 필요조차 없습니다. 그들은 단순히 HTTP 요청을 모니터링하고 해당 요청을 재생할 수 있습니다 (예 : Fiddler와 같은 도구에서는 매우 쉽습니다).

스로틀링 문제

스로틀 링 솔루션은 공격 속도를 줄이지 만 실제로는 실용적이지 않습니다. 문제는 대적이 며칠에 걸쳐 실행되는 대본을 쓸 수 있다는 것입니다. 그런 다음 프록시를 사용하여 병렬 요청을 보낼 수 있습니다. 그리고 당신이 사용자 이름에 따라 스로틀을한다면, 그것들은 합법적 인 사용자 이름에 대한 허위 로그인을 시도하고 실제 사용자가 로그인하려고 할 때 그가 왜 잠겨 있는지 알지 못합니다.

해결책

일반적인 접근법은 Nonce 키를 사용하는 것입니다. 추가 작업이 필요하지만 문제를 완화 할 수 있으며 공격이나 무언가에 대한 맹공격을 예상하는 경우에만 권장됩니다. 이것의 단순화 된 버전은 클라이언트가 Nonce 키를 URI 쿼리 매개 변수로 전달합니다. 키는 서버가 처음으로 클라이언트에게 발행합니다. 요청이 이루어지면 서버는 데이터베이스에 Nonce 키가 존재하는 것이 유효성이 있으며 요청을 허용합니다. 사용자가 동일한 NONCE 키로 다른 요청을 할 수 없으므로 서버는 사용자에게 더 많은 NOCE 키를 발행해야합니다.

단순화 된 솔루션은 인증 된 사용자가 웹 서비스 요청을 할 수 있도록하는 것이지만 로그인 시스템을 설계하고 있기 때문에 분명히 고정되지는 않습니다.

당신이 불쾌한 대적이 없다면 나는 그것에 대해 걱정하지 않을 것입니다.

다른 팁

페이지 메소드에 노출되어 세션을로드했다고 가정하므로 페이지가로드 될 때 세션 변수를 설정 한 다음 페이지 메소드가 호출 될 때 존재하는지 확인할 수 있다고 생각합니다. 세상에서 가장 안전한 것은 아니지만 도움이 될 것입니다.

개인적으로 나는 다른 사람들이 말했듯이 웹 서비스는 본질적으로 공개적입니다.

나는 문제가 없다고 말하고 싶습니다. 그러나 아마도 당신은 아마 몇 가지를하고 싶을 것입니다 요율 제한 그래서 사람들은 짐승을 강제로 시도 할 수 없습니다.

2-3 로그인 실패를 말한 후 Brute-Force를 피할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top