2011-02-01 3 views
0

사용자가 양식을 완료하고 제출하려고하면 서버를 쿼리하여 사용자가 인증되었는지 확인하려고합니다. 그렇지 않은 경우, 로그인 한 후 닫히고 양식 데이터를 그대로두고 제출 준비가 된 로그인 창을 팝업하고 싶습니다.XSS 오류없이 AJAX 테스트 후 양식을 제출하는 방법은 무엇입니까?

사용자가 로그인 한 경우 form.submit()을 호출하려고하지만 콜백에서 발생하므로 XSS 오류가 발생합니다. 더 좋은 방법이 있습니까? 여기에 내가 시도 것입니다 :

function submitForm(form) { form.submit();} 

$("#myForm").submit(function() { 
        var thisForm = this; 
        $.getJSON("/url/login_check/", function(data) { 
          if (data.loggedIn === true) { 
           submitForm(thisForm); 
          } 
          else { 
           // display login popup 
          } 
        }); 
        return false; 
    }); 
+1

xss 오류는 무엇입니까? – arnaud576875

+0

내 브라우저에 다음 메시지가 표시됩니다. 403 Forbidden Cross Site Request Forgery detected. 요청이 중단되었습니다. – Mitch

+0

어떤 서버 측 스택을 사용하고 있습니까? 이것은 생기있는 것처럼 들리 - 로그인 상태를 확인하기 위해 명시 적으로 전화를 걸지 않아도됩니다. – hvgotcodes

답변

0

당신은 당신이 할 수없는 다른 도메인에 JSON 요청을 보내려고하고 있기 때문에 당신은 XSS 오류가 있어요.

아마 당신이해야 할 일은 JSONP 요청을 보내는 것입니다 (인증 서버가 지원한다고 가정). 이렇게하면 데이터를 원격 도메인으로 보내고 응답을 처리 할 수 ​​있습니다.

+0

그게 내가 생각한 것입니다. 호소력이없는 대안은 서버에 대한 동기식 쿼리를 만드는 것일 수 있습니다. 또한 JSONP는 GET에서만 작동하지 않습니까? – Mitch

+0

인증을 수행하는 경우 GET이 적절한 동사입니다. POST는 서버 상태에 해당하는 변경 사항이있는 경우에만 의미가 있습니다. 또한 쿼리가 동기인지 여부는 중요하지 않습니다 ... 코드를 제공하는 도메인과 다른 도메인에있는 경우 XSS를 시도하고 있습니다. – Dancrumb

+0

GET에 대해 맞습니다. 인증 요청을 양식의 POST와 혼동하고있었습니다. 그러나 폼의 도메인과 getJSON 요청은 동일합니다. getJSOn 함수는 폼이있는 페이지에서 폼을 제출해야합니다. 그래서 다른 도메인이 어디에 있는지 알지 못합니다. – Mitch

관련 문제