예를 들어, 로그인 창에 입력하는 html 구문을 필터링 하지 않아 아래와 같이 가짜 로그인창을 생성 할 수도 있다.
Username:<br><input type="text" name="firstname"><br>Password:<br><input type="password" name="lastname">
입력값 중에 <.>,",'를 필터링 하기 위해 htmlspecialchars 함수를 이용하면 된다.
아래와 같이 html 코드가 반영이 안되고 화면에 그대로 출력된다.
위의 HTML 인젝션 - Reflected 와 달리 stored는 다수의 사용자를 타겟으로 하기 때문에 파급력이 더 높다고 할 수 있다.
기존 html 코드를 필터링 하는 경우, URL / html encode 해서 테스트 해 볼 수도 있다. 즉 html 관련 취약점을 점검할 때는, %2F 와 같은 인코디 값을 받고 디코드해서 렌드링 하는 사이트를 찾아야 한다.
- https://hackerone.com/reports/104543
또 하나 중요한 것은, 입력 form 에서만 렌더링 되는 것이 아니라, url 입력되어 있는 값이 렌더링 될 수도 있다는 것이다.
여기 해커원 보고서(https://hackerone.com/reports/111094)를 보면, https://withinsecurity.com/wp-login.php?error=access_denied 에서 error 파라미터 값이 화면에 렌더링 되는 것을 확인하고, 변조를 하여 https://withinsecurity.com/wp-login.php?error=Your%20account%20has%20%hacked 이런식으로 변조하여 사용자를 속일 수 있다고 경고했다.