웹페이지는 기본적으로 HTML로 구성하며
웹언어로 만들더라고 마지막 출력물은 HTML
즉, HTML을 잘 만드는게 목표?
이 게시물은 HTML+PHP 를 기준으로 설명을 합니다.
- htmlspecialchars()를 제발 좀... 사용하라!
- <,>,&,",' 등이 엔티티로 바꿔서 출력된다.
사용 안하여 그대로 출력될 경우,
XXS 등의 공격을 받을 수도 있다. - <input name="search" type="text" value="<?=$_GET['search']?>" />
->
<input name="search" type="text" value="<?=
htmlspecialchars($_GET['search'])?>" />
- PHP의 값을 HTML로 출력한다면 꼭 사용하라!
- form의 action에 $PHP_SELF는 필요 없다.
- $PHP_SELF(= $_SERVER['PHP_SELF']) 은 현재의 URL의 웹 파일 경로를 나타내기 위한것이지만
form 태그의 action에서 <form action=""> 처럼해도 현재의 URL을 나타낸다.(HTML규칙에 위배되지도 않는다!)
즉, 빈값이 현재 페이지를 의미한다. - $PHP_SELF 가 문제가 되는 이유는
http://xxxx.com/test.htm/'"><script>{{스크립트코드}}</script>?test=test1 (굵은 부분이 경로 조작)
위처럼 할 경우 $PHP_SELF는
/test.htm/'"><script>{{스크립트코드}}</script> 가 되버려서
결과적으로
<form action="/test.htm/'"><script>{{스크립트코드}}</script>" >
처럼 되어서
{{스크립트코드}}가 실행되어 버린다. - 여기서도 htmlspecialchars()를 사용했다면 에러는 나겠지만, {{스크립트코드}}는 동작되지 않는다.
꼭 써야한다면, htmlspecialchars()를 사용하라! 제발...좀... - 문제점 (XXS)
- 스크립트 코드에 쿠키값을 다른 사이트로 전송하게 만들었다면?
- 쿠키를 유출해서 타인이 로그인 할 수도 있다.
- 악의적으로 URL을 링크시켜 놓고 그 링크에 방문한다면?