질문/조언질답게시판
Extra Form
PHP PHP 7.4
CMS Rhymix 2.x

xe 모듈을 제작하는건 아니고 php로 사이트를 제작하고 있습니다

초보라서 인터넷 검색해가며 해킹 방지를 생각하며 코드를 작성했는데

xss 방지를 위해서 htmlspecialchars() 를 사용자가 입력한 정보를 출력할때 사용했고

Sql 인젝션을 방지를 위해 POST로 받아오는 정보를 $ex = mysqli_real_escape_string($conn, $_POST['ex']); 이렇게 작성했습니다

해킹을 방지하기 위해서 저 두개의 대책만 사용하여도 충분한지 궁금합니다

감사합니다

 

  • profile

    화면에 내용을 출력할 때 htmlspecialchars는 잘 하고 계십니다.

    DB에 입력할 때 각 변수의 escape에만 의존하기보다는

    prepared statement (파라미터 바인딩) 사용법을 익히시면 좋습니다.

     

    mysqli 함수도 가능한 버리고, 모든 DB 관련 작업에는 PDO를 쓰시는 걸 추천합니다.

    mysqli는 파라미터 바인딩이 힘들어서, 귀차니즘 때문에 안 좋은 방법으로 코딩하게 될 위험이 높습니다.

    보안은 해커와의 싸움보다도 나 자신의 귀차니즘과의 싸움입니다.

    htmlspecialchars도 일일이 쓰기 귀찮죠? 그러면 허점이 생기게 마련입니다.

     

    일단 그렇게 XSS와 SQL 인젝션은 막을 수 있고,

    이제 CSRF, 세션 탈취, 파일 업로드를 통한 웹쉘이나 directory traversal 공격 등

    다른 수백 가지 공격도 감안해서 코딩을 해야겠지요. ㅠㅠ

  • profile profile
    우선 답변 감사합니다
    PDO 사용을 추천하셨는데 사실 구글 로그인 기능을 구현하려고 인터넷에서 소스코드를 다운받았는데 그쪽 코드에서 pdo로 작동하더군요 기존에 구현했던 기능들이 다 mysqli 함수로 작동하고 pdo를 사용할줄도 모르고 연동하니 자꾸 오류가 나서 구글 로그인 관련한 기능이 작동할때만 pdo를 사용하도록 하고 나머지는 다 mysqli로 작동하게 해놨습니다.. 그외에 prepared 구문을 사용했습니다
    그 외에 말씀해주신 공격 기법에 대해서 읽어보았는데 csrf는 로그인 방법을 구글 로그인만을 사용하니까 상관 없을것 같고 세션 탈취는 xss 방어만 잘하면 되는것 같은데 맞나요..? 제가 워낙에 초보자라서.. 읽어주셔서 감사합니다
  • profile profile
    CSRF는 현재 누군가가 로그인되어 있다는 사실이 중요할 뿐, 어떤 방법으로 로그인했는지와는 관계없습니다. 개발자들이 가장 과소평가하는 공격 유형 중 하나이니 제대로 파악해 두시면 남들보다 훨씬 더 안전한 사이트를 만드실 수 있을 것입니다.

    세션은 PHP 기본 세션만 사용하고 사이트에 https만 사용한다면 거의 문제가 없습니다.