보안 없이는 웹 개발도 없다
2022년 말, 보안에 대한 글을 정리했습니다. 소규모 개발사라도 고객의 데이터를 보호할 책임이 있습니다.
SQL 인젝션
// 위험한 코드
$sql = "SELECT * FROM users WHERE email = '" . $_GET['email'] . "'";
// email = ' OR '1'='1' 을 입력하면 모든 사용자 정보 노출
// 안전한 코드 - Prepared Statement
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $_GET['email']);
$stmt->execute();
$result = $stmt->get_result();
XSS (Cross-Site Scripting)
// 위험한 코드
<p><?php echo $_GET['comment']; ?></p>
// comment = <script>alert('hack')</script> 을 입력하면 스크립트 실행
// 안전한 코드 - HTML 인코딩
<p><?php echo htmlspecialchars($_GET['comment'], ENT_QUOTES, 'UTF-8'); ?></p>
CSRF (Cross-Site Request Forgery)
사용자가 다른 사이트에 있을 때, 그 사이트에서 나도 모르게 내 은행 계좌에서 돈을 인출하도록 강요할 수 있습니다.
해결책: CSRF 토큰을 폼에 포함하고 검증합니다.
보안 체크리스트
- 모든 입력값 검증 및 살균
- HTTPS 사용
- 비밀번호 암호화 (bcrypt, argon2)
- 접근 제어 및 권한 관리
- 민감한 데이터 암호화
- 정기적인 보안 감사