사실 이 부분에 대해서 나중에 검색해봐야지... 해놓고 미루고 있었는데 조원이 c:out을 썼을 때랑 그냥 EL만 사용했을때랑 뭐가 다르냐고 물어봤을때 나도 잘 모르겠는데... 🤨? 아마도 c:out가 출력해주니까 el만 썻을때는 아무것도 안뜨고 c:out으로 해야지 값이 출력되지 않을까? 라고 말해주고 확실하지 않으니까 검색해보라고 답변을 했던 기억이 난다...
그리고 오늘 집에서 복습을 하는데 내가 했던 답이 얼추......? 맞다는 걸 알게 됐다.. ^^;; (그래도 한 15% 정도는 맞췄네 껄껄)
인터넷에 c:out 왜 쓰는데?
하고 검색해보면 꽤 많은 포스팅이 나온다. 읽어보면 대부분 보안의 이유로 사용하고 출력 문자열에 특수문자가 들어갔을때 HTML을 해석하지 않고 그대로 출력되도록 해주고..... 삼항연산자를 사용할 수 있고.... 파싱 블라블라...
됐고 뭐가 다른지 실습을 해보자 🤯
여기에서 사용하는 result는 boardController에서 register 글 작성 완료 시 모달창에서 몇 번 글이 작성됐어요~ 할 때 사용하려고 result와 bno를 보내는데 그걸 테스트 용도로 사용함!
<script>
$(document).ready(function() {
${result}
});
</script>
list.jsp에서 이렇게 적은 뒤에 페이지에서 페이지 소스 보기를 클릭하면 (참고로 result은 FlashAttribute라서 글 작성 후에 소스를 봐야지만 값이 들어있다!)
이렇게 방금 작성한 글의 번호(bno)가 담겨져있다! 하지만 이 부분은 변수로 선언해서 받아준다던가 그런 처리가 없이 값만 있는 거라서 문법적으로 오류가 있다.
var result = '20';
이런 식으로 출력이 되게끔 해야한다!
<script>
$(document).ready(function() {
var result = '${result}';
});
</script>
생각한 대로 var result = '' 안에 result 값이 잘 넘어와서 출력이 됐다.
<script>
$(document).ready(function() {
var result = '<c:out value="${result}" />';
});
</script>
1번과 동일하게 result 값이 잘 넘어와서 출력이 됐다.
이렇듯 눈으로 보이는 출력의 결과는 똑같다! 자 그러면 그 검색하면 항상 나오는 그 보안상의 이유를 눈으로 직접 확인해보자...
이 공격에 대한 부분은 경고문이 있는 만큼 실행한 결과만 포스팅하겠다!
....검색창 만들고나서 테스트하기..... 🫠🫠