2011-05-06 5 views
5

XSS에 대해 100 % 안전합니까? 그렇지 않은 경우 나에게 왜 나쁜 문자열 텍스트를 보여 주시겠습니까?XSS : PHP의 json_encode를 사용하여 javascript 객체 만들기

<html> 
    <body> 
    <script> 
     <?php 
     $bad = "some bad string. please give example text that makes the below unsafe"; 
     echo "var a = ".json_encode($bad).";"; 
     echo "var b = ".json_encode(array($bad)).";"; 
     ?> 
    </script> 
    </body> 
</html> 

Thanks. 
+2

그게 결국 당신이'a'로 무엇을 할 것인가에 달렸습니까? – chustar

+0

'$ bad'는 실제로 어디에서 왔습니까? 'json_encode'는 "실행 불가능"인 유효한 [JSON] (http://json.org/) 만 생성하므로 중요하지 않습니다. –

+0

@kevin,'json_encode'는 유효한 json – Neal

답변

4

간단히 말해서, 안전합니다. 가능한 XSS는 자바 스크립트 문자열 (") 또는 스크립트 (</script>)에서 탈출해야합니다. 두 문자열 모두 올바르게 이스케이프 처리됩니다.

"   becomes \" 
</script> becomes <\/script> 

직접 주입에 관한 부분입니다. 응용 프로그램은 일부 배열 요소가 누락 될 수 있음을 고려해야합니다. 또 다른 가능성은 배열 요소가 예상 한 유형이 아니라는 것입니다 (예 : 문자열 대신 배열)

1

확실히 아닙니다!

json_encode를 사용하여 javascript를 이스케이프 처리하지 마십시오. 예를 들어

:

로 json_encode <img src=# onerror=alert(1)>,이 브라 우어에 아무것도 출력을 탈출하지 않습니다. 이것은 xss입니다.

htmlspecialchars을 대신 사용하십시오.

+0

정답입니다. 간단히 말해서 대부분의 것들은 안전하지 못하다. – JoeMoe1984

관련 문제