취약점 진단

[취약점 진단] form 태그의 action 값에서 필터링이 취약한 예시와 개선된 예시

jarvis-concert 2024. 10. 11. 16:50
반응형

form 태그(name="search_form")에서 action 값에서 필터링이 미흡합니다.

 

[취약한 <form> 코드 (검색 폼 예시)]

<form name="search_form" action="/search" method="GET">
  <input type="text" name="query">
  <button type="submit">Search</button>
</form>

 

[개선된 <form> 코드 (검색 폼 예시)]

<form name="search_form" action="/search" method="POST">


  <!-- CSRF 토큰을 사용하여 사이트 간 요청 위조 방지 -->
  <input type="hidden" name="csrf_token" value="your_csrf_token_here">
  
  <!-- 알파벳과 숫자만 입력 가능하도록 pattern 설정 -->
  <input type="text" name="query" required pattern="[a-zA-Z0-9\s]+" title="Only alphanumeric characters and spaces are allowed">
  
  <button type="submit">Search</button>
</form>

주요 개선 사항:
1. POST 방식으로 전송: 검색어가 URL에 노출되지 않으며, 검색 결과 URL이 길어지는 문제도 해결됩니다.
2. CSRF 토큰 검증: 위조된 요청을 방지하여 CSRF 공격을 막습니다.
3. SQL 인젝션 방지: 사용자 입력을 SQL 쿼리에 직접 삽입하지 않고 Prepared Statement를 사용해 바인딩합니다.
4. XSS 방지: 사용자 입력을 그대로 출력하지 않고 htmlspecialchars()로 이스케이프 처리하여 악성 스크립트 실행을 방지합니다.
5. 클라이언트 측 검증: required와 pattern 속성을 사용해 기본적인 입력 검증을 클라이언트에서 처리합니다.

 

반응형