PHP 보안 관련 질문 있습니다
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.4 |
xe 모듈을 제작하는건 아니고 php로 사이트를 제작하고 있습니다
초보라서 인터넷 검색해가며 해킹 방지를 생각하며 코드를 작성했는데
xss 방지를 위해서 htmlspecialchars() 를 사용자가 입력한 정보를 출력할때 사용했고
Sql 인젝션을 방지를 위해 POST로 받아오는 정보를 $ex = mysqli_real_escape_string($conn, $_POST['ex']); 이렇게 작성했습니다
해킹을 방지하기 위해서 저 두개의 대책만 사용하여도 충분한지 궁금합니다
감사합니다
댓글 3
화면에 내용을 출력할 때 htmlspecialchars는 잘 하고 계십니다.
DB에 입력할 때 각 변수의 escape에만 의존하기보다는
prepared statement (파라미터 바인딩) 사용법을 익히시면 좋습니다.
mysqli 함수도 가능한 버리고, 모든 DB 관련 작업에는 PDO를 쓰시는 걸 추천합니다.
mysqli는 파라미터 바인딩이 힘들어서, 귀차니즘 때문에 안 좋은 방법으로 코딩하게 될 위험이 높습니다.
보안은 해커와의 싸움보다도 나 자신의 귀차니즘과의 싸움입니다.
htmlspecialchars도 일일이 쓰기 귀찮죠? 그러면 허점이 생기게 마련입니다.
일단 그렇게 XSS와 SQL 인젝션은 막을 수 있고,
이제 CSRF, 세션 탈취, 파일 업로드를 통한 웹쉘이나 directory traversal 공격 등
다른 수백 가지 공격도 감안해서 코딩을 해야겠지요. ㅠㅠ
PDO 사용을 추천하셨는데 사실 구글 로그인 기능을 구현하려고 인터넷에서 소스코드를 다운받았는데 그쪽 코드에서 pdo로 작동하더군요 기존에 구현했던 기능들이 다 mysqli 함수로 작동하고 pdo를 사용할줄도 모르고 연동하니 자꾸 오류가 나서 구글 로그인 관련한 기능이 작동할때만 pdo를 사용하도록 하고 나머지는 다 mysqli로 작동하게 해놨습니다.. 그외에 prepared 구문을 사용했습니다
그 외에 말씀해주신 공격 기법에 대해서 읽어보았는데 csrf는 로그인 방법을 구글 로그인만을 사용하니까 상관 없을것 같고 세션 탈취는 xss 방어만 잘하면 되는것 같은데 맞나요..? 제가 워낙에 초보자라서.. 읽어주셔서 감사합니다
세션은 PHP 기본 세션만 사용하고 사이트에 https만 사용한다면 거의 문제가 없습니다.