아약스 CSRF

아약스와 배경에 데이터를 제출

{# <! DOCTYPE html로> #} 
<HTML LANG = "EN"> 
<head> 
    <메타 문자 집합 = "UTF-8"> 
    <제목> 제목 </ 제목> 
    <스크립트 SRC = "/ 정적 / JQuery와 - 3.2. 1.min.js "> </ script> 
    <스타일> 
        .SP { 
            색상 : 빨강; 
        } 
    </ 스타일> 
</ head> 
<body> 
<p>姓名<입력 유형 = "텍스트"> </ p> 
<p>密码: <INPUT TYPE = "비밀번호"> </ p> 
<p> 
    < 버튼 클래스 = "서브">提交</ 버튼> <스팬 클래스 = "SP"> </ SPAN> 
</ p> 
<script> 
    함수 foo () { 
            $ ( "SP.") HTML ( "."); 
        } 
    $ ( ". 하위")을 클릭 (함수 () {. 
        $ 아약스 ({ 
            URL : "/ demo_ajax /", 
            유형 : "POST"를,
            데이터 : { 
                사용자 이름 : $ ( "텍스트") 발 (),. 
                비밀번호 : $ ( "비밀번호") 발 (). 
            }, 
            성공 : 기능 (데이터) { 
                var에 데이터 = JSON.parse (데이터); 
                만약 (! 데이터 [ "플래그"]) { 
                    $ ( ". SP"). HTML ( "用户名或密码错误") 
                    의 setTimeout (foo는, 3000) 
                } 
            } 
        }) 
    }) 
</ script> 
</ body> 
</ HTML>

 버그 리포트를 제출 이러한 방식의 프론트 엔드는 더 증가 csrf_token가 없기 때문에 금지, 대신 양식의 제출이 양식을 사용한다 :

어떻게이 문제를 해결하기 위해? 세 가지 방법으로이 문제를 해결하는 일반적인 방법으로,이 세 가지 방법을 사용하는 방법에 대해 다음 있습니다 말했다 :

한 가지 방법 :

아약스 요청 값 제출의 시간을 사전에 그에게 제공 : 
함수 foo () { 
            "$ (". SP ") HTML ("); 
        } 
    (. 하위 ") $"를 클릭을 (함수 () {. 
### #################################### 
        $ .ajaxSetup ({ 
            데이터 : {csrfmiddlewaretoken : '{{csrf_token }}} 
        }); 
####################################### 
        $ 아약스 ( { 
            URL : "/ demo_ajax /" 
            유형 : "POST가" 
            데이터 : { 
                사용자 이름 : $ ( "텍스트") 발 () ,. 
                비밀번호 : $ ( "비밀번호"). 발 () 
            }, 
            성공 : 기능 (데이터) { 
                IF (! 데이터 [ "깃발"]){
                VAR = JSON 데이터.(데이터)를 분석;
                IF (! 데이터 [ "플래그"]) { 
                    $ ( ". SP"). html로 ( " 사용자 이름 또는 암호가 올바르지 않습니다"), 
                    에서는 setTimeout (foo는, 3000) 
                } 
            } 
        }) 
    })

두 번째 방법 :

본체 부 : 
<form 조치 = ""> 
{%의 csrf_token의 %} 
<P> 이름 <INPUT 타입 = "텍스트"> </ P> 
<P> 비밀 <INPUT 타입 = "비밀번호"> </ P> 
< / FORM> 
<ρ-> 
    <Button 클래스 = "서브"> 제출 </ 버튼> <스팬 클래스 = "SP"> </ SPAN> 
</ ρ-> 
버튼 그렇지 않으면 제출을 얻기 위해 기본값으로, 외부에 쓰고 
--- -------------------------------------------------- ----------------------------------- 
여기 JS 코드 : 
    함수 foo () { 
        $ ( "SP. ") .html 중에서 (" "); 
    } 
    $ ("서브. ")를 클릭 (함수 (.) { 
        $ 아약스 ({ 
            URL :"/ demo_ajax / ", 
            유형"POST ", 
            데이터 : { 
                사용자 이름 : $ ("텍스트 ") 발 (),.
                암호 : $ ( "비밀번호"). 발 () 
                csrfmiddlewaretoken : $ ( "[이름 = 'csrfmiddlewaretoken']") 발 (). 
            } 
            성공 : 기능 (데이터) { 
                VAR 데이터 = JSON.parse (데이터 ); 
                만약 (! 데이터 [ "플래그"]) { 
                    $ ( ". SP"). HTML ( "用户名或密码错误") 
                    의 setTimeout (foo는, 3000) 
                } 
            } 
        }) 
    })

세 가지 방법 :

        함수 foo () { 
        $ ( "SP.") HTML ( "."); 
    } 
    $ ( ". 하위") ((클릭 기능) {. 
        $ 아약스 ({ 
            URL : "/ demo_ajax /" 
            유형 : "POST", 
            헤더 : { "X-CSRFToken". $ 쿠키 ( 'csrftoken' )}, 
            데이터 : { 
                사용자 이름 : $ ( "텍스트".) 발 (), 
                비밀번호 : $ ( "비밀번호".) 발 () 
            }, 
            성공 : 기능 (데이터) { 
                var에 데이터 = JSON.parse (데이터 ) 
                ! (만약 데이터 [ "플래그"]) { 
                    $ ( ". SP") HTML ( "用户名或密码错误").

당신이 양식 양식을 제출할 수는 형태로 양식을 제출할 수있는 세 가지 방법 :

 
 
 

원본 주소 : https://www.cnblogs.com/52-qq/

아약스와 배경에 데이터를 제출

{# <! DOCTYPE html로> #} 
<HTML LANG = "EN"> 
<head> 
    <메타 문자 집합 = "UTF-8"> 
    <제목> 제목 </ 제목> 
    <스크립트 SRC = "/ 정적 / JQuery와 - 3.2. 1.min.js "> </ script> 
    <스타일> 
        .SP { 
            색상 : 빨강; 
        } 
    </ 스타일> 
</ head> 
<body> 
<p>姓名<입력 유형 = "텍스트"> </ p> 
<p>密码: <INPUT TYPE = "비밀번호"> </ p> 
<p> 
    < 버튼 클래스 = "서브">提交</ 버튼> <스팬 클래스 = "SP"> </ SPAN> 
</ p> 
<script> 
    함수 foo () { 
            $ ( "SP.") HTML ( "."); 
        } 
    $ ( ". 하위")을 클릭 (함수 () {. 
        $ 아약스 ({ 
            URL : "/ demo_ajax /",
            유형 : "POST", 
            데이터 : { 
                사용자 이름 : $ ( "텍스트"). 발 (), 
                비밀번호 : $ ( "비밀번호"). 발 () 
            }, 
            성공 : 기능 (데이터) { 
                var에 데이터 = JSON. (데이터)를 분석; 
                만약 (! 데이터 [ "플래그"]) { 
                    $ ( ". SP"). HTML ( "用户名或密码错误") 
                    의 setTimeout (foo는, 3000) 
                } 
            } 
        }) 
    }) 
</ script> 
</ body> 
</ HTML>

 버그 리포트를 제출 이러한 방식의 프론트 엔드는 더 증가 csrf_token가 없기 때문에 금지, 대신 양식의 제출이 양식을 사용한다 :

어떻게이 문제를 해결하기 위해? 세 가지 방법으로이 문제를 해결하는 일반적인 방법으로,이 세 가지 방법을 사용하는 방법에 대해 다음 있습니다 말했다 :

한 가지 방법 :

아약스 요청 값 제출의 시간을 사전에 그에게 제공 : 
함수 foo () { 
            "$ (". SP ") HTML ("); 
        } 
    (. 하위 ") $"를 클릭을 (함수 () {. 
### #################################### 
        $ .ajaxSetup ({ 
            데이터 : {csrfmiddlewaretoken : '{{csrf_token }}} 
        }); 
####################################### 
        $ 아약스 ( { 
            URL : "/ demo_ajax /" 
            유형 : "POST가" 
            데이터 : { 
                사용자 이름 : $ ( "텍스트") 발 () ,. 
                비밀번호 : $ ( "비밀번호"). 발 () 
            }, 
            성공 : 기능 (데이터) { 
                VAR = JSON 데이터.(데이터)를 분석;
                IF (! 데이터 [ "플래그"]) { 
                    $ (. "SP"). HTML ( "사용자 이름 또는 암호가 올바르지 않습니다"), 
                    에서는 setTimeout (foo는, 3000) 
                } 
            } 
        }) 
    })

두 번째 방법 :

본체 부 : 
<form 조치 = ""> 
{%의 csrf_token의 %} 
<P> 이름 <INPUT 타입 = "텍스트"> </ P> 
<P> 비밀 <INPUT 타입 = "비밀번호"> </ P> 
< / FORM> 
<ρ-> 
    <Button 클래스 = "서브"> 제출 </ 버튼> <스팬 클래스 = "SP"> </ SPAN> 
</ ρ-> 
버튼 그렇지 않으면 제출을 얻기 위해 기본값으로, 외부에 쓰고 
--- -------------------------------------------------- ----------------------------------- 
여기 JS 코드 : 
    함수 foo () { 
        $ ( "SP. ") .html 중에서 (" "); 
    } 
    $ ("서브. ")를 클릭 (함수 (.) { 
        $ 아약스 ({ 
            URL :"/ demo_ajax / ", 
            유형"POST ", 
            데이터 : { 
                사용자 이름 : $ ("텍스트 ") 발 (),.
                암호 : $ ( "비밀번호"). 발 () 
                csrfmiddlewaretoken : $ ( "[이름 = 'csrfmiddlewaretoken']") 발 (). 
            } 
            성공 : 기능 (데이터) { 
                VAR 데이터 = JSON.parse (데이터 ); 
                만약 (! 데이터 [ "플래그"]) { 
                    $ ( ". SP"). HTML ( "用户名或密码错误") 
                    의 setTimeout (foo는, 3000) 
                } 
            } 
        }) 
    })

세 가지 방법 :

        함수 foo () { 
        $ ( "SP.") HTML ( "."); 
    } 
    $ ( ". 하위") ((클릭 기능) {. 
        $ 아약스 ({ 
            URL : "/ demo_ajax /" 
            유형 : "POST", 
            헤더 : { "X-CSRFToken". $ 쿠키 ( 'csrftoken' )}, 
            데이터 : { 
                사용자 이름 : $ ( "텍스트".) 발 (), 
                비밀번호 : $ ( "비밀번호".) 발 () 
            }, 
            성공 : 기능 (데이터) { 
                var에 데이터 = JSON.parse (데이터 ) 
                ! (만약 데이터 [ "플래그"]) { 
                    $ ( ". SP") HTML ( "用户名或密码错误").
        }) 
    })

당신이 양식 양식을 제출할 수는 형태로 양식을 제출할 수있는 세 가지 방법 :

추천

출처www.cnblogs.com/gaidy/p/11696425.html