【자신용】PHP의 보안 대책에 대해서

6110 단어 HTMLSQLPHP

주의!



이 기사는 학생 공부 비망록입니다.
모호한 표현이나 오류가 포함될 수 있습니다.
열람하실 때는 어디까지나 참고 정도로 ...

또, 수정이나 의견등은 두시도시 받을 수 있으면 매우 기쁩니다.

잘 부탁드립니다.

PHP 보안 대책 정보



PHP의 대표적인 보안 대책을 2개 소개합니다.

① 크로스 사이트 스크립팅 대책



크로스 사이트 스크립팅 공격은 양식에 악성 코드를 입력하여 실행하고 사용자 쿠키와 같은 정보를 훔치는 것입니다.

예를 들어,

PHP
<?PHP
    echo "こんにちは、".$_GET["name"]."さん!";
?>


화면 ↓


여기에 이름을 입력하여 보내면,

화면 ↓


이러한 사양의 폼에, 이하의 JavaScript를 입력해 본다.
<script>alert("アラート")</script>

실행하면 ... ↓


따라서 스크립트가 실행됩니다.

이번은 단지 경고입니다만, 이것이 악의가 있는 것이라고… 라고 하는 것입니다.

대책으로는 양식에 입력된 내용을 위생(무효화)하는 것이 일반적입니다.

스크립트를 스크립트 그대로 실행하는 것이 아니라 단순한 문자열로 인식하도록 합니다.

문자열 변환은 htmlspecialchars() 함수(메소드)를 사용합니다.

그렇다면 PHP를 다시 작성할 것입니다.
<?PHP
    echo "こんにちは、".htmlspecialchars($_GET["name"], ENT_QUOTES, 'UTF-8')."さん!";
?>


방금 전과 같은 스크립트를 입력하면 ...

화면 ↓


제대로 문자열입니다! !

크로스 사이트 스크립팅 공격의 대책에 대해서는 이상입니다.

②SQL 인젝션 대책



SQL 인젝션 공격은 폼에 악의가 있는 SQL 문장을 입력하고 실행함으로써 데이터베이스에서 정보를 훔치거나 데이터베이스를 파괴하는 공격을 말한다.
追記: プリペアド・ステートメント = プレースホルダ = バインド機構
예를 들어,
입력 양식에 학적 번호를 입력하고 해당
이름을 출력하는 시스템이 있다고 가정합니다.
<?PHP
    $db_connect = new mysqli('ホスト名','ユーザー名','パスワード','データベース名');
    //省略
    $db_connect->close();

    $search = "SELECT * FROM students WHERE id = '".$_GET["student_num"]."';"; 
    $result = $mysqli -> query($search);

    //出力(結果表示)の処理も省略
?>

위의 코드와 같이 SQL 문에 그대로 폼으로 입력한 내용을 사용하면,

다음 내용을 입력하면 모든 레코드에 적용됩니다.
'OR 1;--
//条件文が無効化される

대책으로서는, mysqli_real_escape_string() 함수를 사용해, 싱글 쿼테이션등을 무효화하는, 또는, 플레이스홀더를 이용해 상정되는 문자만을 받아들이도록(듯이) 하는 방법이 있습니다.

· mysqli_real_escape_string () 함수 ↓


    $search = "SELECT * FROM students WHERE id = '".mysqli_real_escape_string($db,$_GET["student_num"])."';";

・플레이스 홀더를 사용 ↓


    $search = "SELECT * FROM students WHERE id = :student_num;";

양식의 내용에 따라 변하는 부분을 ":"로 시작하는 대체 문자로 다시 씁니다.

그런 다음 bindValue() 함수를 사용하여 실제 입력 값을 바인딩합니다.
bindValue(':student_num', $_GET["student_num"], PDO::PARAM_INT);

참고로 입력 값이 문자열이면 PDO::PARAM_STR,
이미지 데이터 등의 경우 *PARAM_LOB *입니다.

※ PARAM_INT 는 수치형.

SQL 인젝션 대책에 대해서는 이상이 됩니다.

사이고에게



여기까지 읽어 주셔서 감사합니다.

PHP의 보안 대책은, 자신이 개발할 때 중요한 일은 물론,

웹 디자인 기능 검정 2급 이상으로 자세하게 돌진되고 있는 이미지가 있으므로 이번 다루어 보았습니다.

지적이나, 공부의 어드바이스, 코멘트등등 있으시면, 부담없이 기입해 가 주세요.

좋은 웹페이지 즐겨찾기