2012-02-08 2 views
2

사용자로부터 입력을 읽고 Java 서블릿을 호출하여 데이터를 처리하는 JSP 양식이 있습니다. 일단 데이터가 처리되면, 중요한 정보를 저장하기 위해 session.setAttribute이 호출됩니다. 그런 다음 Javascript에서 세션 변수를 읽고 화면에 을 표시하려고합니다. 사용자가 양식의 정수를 입력하면 예상대로 모든 작동 출력 제대로 화면에 표시Javascript - session.getAttribute가 정의되지 않은 값을 반환합니다.

<script type="text/javascript"> 
    var test = <%= session.getAttribute("mySessionVar") %>; 
    document.write (test); 
} 

: 코드는 다음과 같이 (제거하는 코드)를 보인다. 그러나 사용자가 양식에 문자열을 입력하면 "정의되지 않음"이 화면에 표시됩니다.

내가 뭘 잘못하고 있는지 아는 사람이 있습니까?

답변

1

var test = '<%= session.getAttribute("mySessionVar") %>'; 
+0

그리고 값에 따옴표 문자가 포함되어 있으면 어떻게 될까요? – RoToRa

+0

백엔드에서 처리해야합니다. – czerasz

+0

"czerasz"- 감사합니다. – user1197071

3

이 코드가 무엇을하는지에 대해 생각해보십시오. 사실, 그것에 대해 생각하지 마라. 페이지가 브라우저에 표시되면 소스 코드를 엽니 다. 값 hello 세션 속성을 포함 가정하면, 다음 코드는

<script type="text/javascript"> 
    var test = hello; 
    document.write (test); 
</script> 

그래서 값이 자바 스크립트 변수로 해석됩니다 생성합니다. 그리고 hello이라는 변수를 정의하지 않았으므로 undefined이됩니다.

그러나 지금 만 추가하면 따옴표 : 값이 사용자로부터 제공하기 때문에 때문에

var test = "<%= session.getAttribute("mySessionVar") %>"; 

은 당신은 아직도 당신이 말한대로, 그것은뿐만 아니라 그 자체를 인용하지만, 포함 할 수있는, 안전하지 않을 것이다 또한 더 많은 JavaScript 코드 또는 HTML 코드.

<script type="text/javascript"> 
    var test = ""; while(1) {alert('This site is crap!')};</script><h1>This site is crap!</h1> 

이제 귀하의 사이트는이 사이트는 쓰레기입니다 "표시되지 않습니다 :

사용자가 "; while(1) {alert('This site is crap!')};</script><h1>This site is crap!</h1> (! 시작에 인용 문자 통지)

가 포함 된 소스 코드에 선도를 입력 상상 ! " 큰 문자로 표시되지만 사용자를 경고 상자가 끝없이 반복되는 방식으로 잠급니다. (Cross-Site Scripting)

숫자 1 웹 개발 규칙, NEVER EVER 정확히 이스케이프 처리되지 않은 항목 (특히 사용자 입력이 아님)이 출력됩니다. JavaScript에는 StringEscapeUtils.escapeJavaScript을, HTML에는 c:out을 사용하십시오.

예를 들어 참조 : PS

: 데이터베이스를 사용하는 경우 I 희망, 당신은 당신을 탈출하는 SQL 문을 올바르게 수행하십시오. 그렇지 않으면 사람들은 매우 간단하게 액세스 할 수 있습니다. 데이터베이스 및 서버 (SQL injection)

관련 문제