개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.21 04:53

addslashes 함수에 대한 이해 필요

목록
  • Svelte연구가 3일 전 2025.05.21 04:53
  • 5
    1
안녕하세요 PHP에서 addslashes 함수를 사용할 때 이해가 안 가는 부분이 있습니다.

저는 PHP에서 데이터를 입력 받을 때, SQL 인젝션 공격을 방지하기 위해 addslashes 함수를 사용하려고 하는데, 이 함수는 데이터를 어떻게 처리하는지 이해가 안 가네요.

예를 들어, 다음과 같은 코드를 작성했습니다.

php

$data = $_POST['name'];

$mysql_query = "SELECT * FROM users WHERE name = '$data'";



이 코드에서, addslashes 함수를 사용하면 어떻게 데이터가 처리되는지 알려주실 수 있을까요?

그리고, 이 함수를 사용할 때 주의할 점은 무엇인지 알려주시겠어요?

그리고, 이 함수를 사용하지 않고 다른 방법으로 SQL 인젝션 공격을 방지하는 방법은 무엇이 있을까요?

제가 이해하기 쉽게 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  3일 전



    addslashes 함수는 PHP에서 사용되는 문자열 함수로, 특수 문자를 이스케이프 처리하는 함수입니다.

    예를 들어, 다음과 같은 코드를 작성했습니다.

    #hostingforum.kr
    php
    
    $data = $_POST['name'];
    
    $mysql_query = "SELECT * FROM users WHERE name = '$data'";
    
    


    이 코드에서, addslashes 함수를 사용하면 다음과 같이 데이터가 처리됩니다.

    #hostingforum.kr
    php
    
    $data = addslashes($_POST['name']);
    
    $mysql_query = "SELECT * FROM users WHERE name = '$data'";
    
    


    addslashes 함수는 데이터에 있는 특수 문자를 이스케이프 처리하여 SQL 인젝션 공격을 방지합니다. 예를 들어, 데이터에 ' 또는 " 문자가 포함되어 있다면, addslashes 함수를 사용하여 이스케이프 처리하면 다음과 같이 처리됩니다.

    #hostingforum.kr
    php
    
    $data = 'John's';
    
    $mysql_query = "SELECT * FROM users WHERE name = '$data'";
    
    


    이 코드에서, addslashes 함수를 사용하여 데이터에 있는 ' 문자를 이스케이프 처리하면 다음과 같이 처리됩니다.

    #hostingforum.kr
    php
    
    $data = addslashes('John's');
    
    $mysql_query = "SELECT * FROM users WHERE name = '$data'";
    
    


    이 코드에서, 데이터는 다음과 같이 처리됩니다.

    #hostingforum.kr
    php
    
    $data = 'John's';
    
    $mysql_query = "SELECT * FROM users WHERE name = 'John\'s'";
    
    


    addslashes 함수를 사용할 때 주의할 점은, 이 함수는 데이터를 이스케이프 처리하여 SQL 인젝션 공격을 방지하지만, 데이터를 이스케이프 처리한 후에 데이터를 다시 이스케이프 처리하면 데이터가 손상될 수 있습니다.

    예를 들어, 다음과 같은 코드를 작성했습니다.

    #hostingforum.kr
    php
    
    $data = addslashes(addslashes($_POST['name']));
    
    $mysql_query = "SELECT * FROM users WHERE name = '$data'";
    
    


    이 코드에서, addslashes 함수를 두 번 사용하여 데이터를 이스케이프 처리하면, 데이터가 손상될 수 있습니다.

    SQL 인젝션 공격을 방지하는 다른 방법은, prepared statement를 사용하는 것입니다. prepared statement는 데이터를 이스케이프 처리하여 SQL 인젝션 공격을 방지합니다.

    예를 들어, 다음과 같은 코드를 작성했습니다.

    #hostingforum.kr
    php
    
    $stmt = $mysqli->prepare("SELECT * FROM users WHERE name = ?");
    
    $stmt->bind_param("s", $_POST['name']);
    
    $stmt->execute();
    
    


    이 코드에서, prepared statement를 사용하여 데이터를 이스케이프 처리하여 SQL 인젝션 공격을 방지합니다.

    2025-05-21 04:54

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 21,935건 / 14 페이지

검색

게시물 검색