728x90
반응형
-
Prepared Statement 사용Prepared Statement는 입력값을 파라미터화하여 쿼리를 실행하기 전에 이미 값이 처리되어있기 때문에 SQL Injection 공격에 대해 안전합니다.
// MySQLi 예시
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();
// PDO 예시
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute(['username' => $username, 'password' => $password]);
$result = $stmt->fetchAll();
728x90
-
입력값 검증입력값을 검증하여 올바른 형식인지 확인하고, 필요한 경우 이스케이프 처리를 해줍니다. 다음은 예시 코드입니다.
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
-
필터링필터링은 특정 문자열을 제거하거나 변경하여 SQL Injection 공격을 방어하는 방법입니다. 예를 들어, 숫자와 알파벳만 입력할 수 있는 필드에서는 이를 제외한 문자열을 필터링합니다.
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
위와 같은 방법들을 조합하여 SQL Injection 공격에 대한 방어코드를 작성할 수 있습니다. 하지만 이 외에도 다양한 보안 이슈가 존재하기 때문에, 적절한 보안 검토와 테스트를 거쳐야 합니다.
728x90
반응형
'코딩 > PHP' 카테고리의 다른 글
[PHP] post방식 뒤로가기시 만료된 페이지 해결 (0) | 2023.03.22 |
---|---|
[PHP] IP 주소를 사용하여 국가와 도시를 알아내기 (0) | 2023.03.22 |
[PHP] html 태그 제거 (0) | 2022.12.01 |
[PHP] 정규식을 이용해서 img 태그 없애고 src값만 가져오기 (0) | 2022.12.01 |
$_SERVER 변수로 얻을 수 있는 정보 (0) | 2022.11.24 |