우리의 개인정보 보호와 비즈니스 위험을 줄이기 위해, 웹 어플리케이션의 보안 취약점에는 어떤것들이 있는지 이해하고 사전에 방어하는 방법을 알아보자.
가장 유명한 웹 보안 취약점으로는 다음과같은 것들이 있다.
웹 애플리케이션에서 사용자 입력을 적절하게 필터링하지 않을 경우 발생할 수 있으며,
취약한 SQL 쿼리를 실행하도록 만들어진다. 공격자는 주로 입력 폼, URL 매개변수 또는 쿠키와 같은 입력 경로를 통해 공격을 시도한다. 그렇다면 SQL Injection의 예시와 해결방법에 대해 알아보자.
간단한 예시로 로그인 페이지에서 다음과 같은 쿼리문을 사용한다고 가정하면
SELECT * FROM users WHERE username = '$username' AND password = '$password';
username와 password에 다음과 같은 정보를 입력해 데이터베이스에 접근이 가능해진다.
SELECT * FROM users WHERE username = ' ' OR '1'='1' -- password = 'anything';
이러한 SQL Injection을 방지하기 위해서는 다음과 같은 방법들이 사용된다.
악의적인 사용자가 스크립트 코드를 삽입하여 다른 사용자의 브라우저에서 실행되게 만드는 공격으로, 세션 쿠키를 탈취하거나 사용자의 브라우저에서 악의적인 동작을 수행한다. 그렇다면 XSS의 예시와 해결방법에 대해 알아보자.
간단한 예시로 사용자의 입력을 바로 출력하는 코드가 있다고 가정하면
<div>Welcome, <?php echo $_GET['username']; ?></div>
공격자가 입력란에 다음과 같은 스크립트를 추가한 URL을 사용자에게 노출시켜 접속 시 ALERT 경고창을 띄우게 된다.
<script>alert("XSS Attack");</script>
이 외에도 게시글과 같이 웹사이트에 업로드를 하는 방식으로도 사용자에게 몰래 접근해 쿠키 정보 및 세션 ID의 내용 탈취 등의 악의적인 동작을 수행한다.
이러한 XSS를 방지하기 위해서는 다음과 같은 방법들이 사용된다.
<script>alert("XSS Attack");</script>
경우 태그를 Replace 시키는 등...)<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted-domain.com; style-src 'self';">
현재 도메인, 신뢰할수 있는 도메인만 허용 )사용자의 인증 정보를 이용하여 피해자의 권한으로 비정상적인 요청을 보내는 공격으로, 사용자가 악의적인 웹 사이트를 방문할 때 발생할 수 있다. CSRF의 예시와 해결방법에 대해 알아보자.
간단한 예시로 다음과 같이 사용자 정보를 업데이트 하는 폼을 사용자의 의도 없이 자동으로 제출하게 하는 방식으로, 악의적인 URL을 노출해 CSRF공격이 들어올 수 있다.
<form action="https://example.com/update-profile" method="POST">
<input type="text" name="newUsername" value="hackerUsername">
<input type="submit" value="Update Profile">
</form>
<script>
// 폼이 자동으로 제출되도록 하는 코드
document.forms[0].submit();
</script>
이러한 CSRF를 방지하기 위해서는 다음과 같은 방법들이 사용되며, 서로 조합해 더욱 강화된 보안을 구축할 수 있다.