Nginx jsonp 호출 실현

jsonp 를 통 해 js 크로스 필드 를 실현 할 때 url 매개 변 수 를 통 해 리 셋 함수 이름 을 지정 해 야 합 니 다. 예 를 들 어:
> curl localhost/jsonptest?callback=cb123
> cb123({'name': 'kobe'});
        nginx 에서 이 기능 을 어떻게 실현 하 는 지 소개 한다.
        우 리 는 nginx 에 우수한 모듈 이 많다 는 것 을 알 고 있 습 니 다. 여기 도 예외 가 아 닙 니 다. 몇 개의 제3자 모듈 에 의존 해 야 합 니 다. 예 를 들 어 ngxdevel, set misc, echo.다운 로드 는 git 를 통 해 편리 합 니 다.
git clone git://github.com/simpl/ngx_devel_kit.git
git clone git://github.com/agentzh/set-misc-nginx-module.git
git clone git://github.com/agentzh/echo-nginx-module.git
        nginx 를 다시 컴 파일 하려 면:
./configure --prefix=/home/server/NGINX_PREFIX 	\
	--add-module=/home/app/shmmap/ngx_module/ngx_devel_kit/ 	\
	--add-module=/home/app/shmmap/ngx_module/set-misc-nginx-module/ 	\
	--add-module=/home/app/shmmap/ngx_module/echo-nginx-module/ 
        nginx 를 성공 적 으로 컴 파일 한 후 jsonp 를 실현 하 는 구체 적 인 설정 을 살 펴 보 겠 습 니 다.
location /jsonptest {
	default_type 'application/x-javascript';
	#         ,     callback
	#    set misc   set_if_empty  。
	#   arg_callback  ,         
	set_if_empty $arg_callback '_ntes_quote_callback';

	#   xss  
			
	#   js     ,   
	if ($arg_callback ~* (^[^0-9][0-9a-z._]+$)) {
		echo_before_body -n "$arg_callback(";
		echo -n "{name: 'kobe'}";
		echo_after_body -n ");";
	}
			
	#    js     ,  403
	if ($arg_callback !~* (^[^0-9][0-9a-z._]+$)) {
		return 403;
	}

}
        다음 테스트:
> curl localhost:8088/jsonptest?callback=abc123
> abc123({name: 'kobe'});
        다음 테스트 xss 공격:
> curl 'localhost:8088/jsonptest?callback=alert(123);abc123'

<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.0.5</center>
</body>
</html>
        위의 설정 을 통 해 간단 한 jsonp 호출 을 실 현 했 습 니 다. nginx 커 뮤 니 티 는 풍부 하고 우수한 모듈 을 제공 하여 이 를 바탕 으로 풍부 한 응용 을 구축 할 수 있 습 니 다. 예 를 들 어 ngx 를 사용 할 수 있 습 니 다.lua 는 위 와 같은 기능 을 간단하게 실현 합 니 다.

좋은 웹페이지 즐겨찾기