PHP 개발자의 경우 PHP 코드 주입 취약성 (코드 주입)은 일반적이고 위험한 공격 방법입니다. 사용자가 입력 한 데이터에 악의적 인 코드를 주입함으로써 공격자는 서버를 제어하여 웹 사이트의 보안을 손상시킬 수 있습니다. 이 취약성을 효과적으로 방어하려면 개발자는 일련의 보호 조치를 취해야합니다. 이 기사는 웹 사이트의 보안을 향상시키는 데 도움이되는 몇 가지 일반적인 PHP 코드 주입 취약성 방어 방법을 소개합니다.
입력 필터링은 PHP 코드 주입 취약점에 대한 첫 번째 방어선입니다. 사용자가 입력 한 데이터를 필터링하면 악성 코드 주입을 효과적으로 방지 할 수 있습니다. 간단한 입력 필터링 기능의 예는 다음과 같습니다.
함수 filter_input ($ input) { $ input = trim ($ input); // 시작 및 끝 공백 문자를 제거하십시오. $ input = stripSlashes ($ input); // backslash $ input = htmlspecialchars ($ input)를 제거합니다. // 특수 문자를 HTML 엔티티로 변환 // 다른 필터링 함수는 요구 사항에 따라 추가 할 수 있습니다. }
이 예에서는`trim ()`함수를 사용하여 입력에서 공간을 제거하고,`stripslashes ()`함수를 뒷발로 제거하고`htmlspecialchars ()`````````함수는 특수 문자를 HTML 엔터티로 변환합니다. 이러한 필터링 작업은 가장 일반적인 코드 주입 공격을 효과적으로 방지 할 수 있습니다.
또 다른 일반적인 PHP 코드 주입 취약성은 악의적 인 SQL 쿼리 문을 구성하여 공격하는 것입니다. 이러한 취약점을 방지하기 위해 개발자는 데이터베이스 쿼리에 전처리 문을 사용해야합니다. 다음은 데이터베이스 쿼리 전처리에 PDO를 사용하는 예입니다.
$ conn = new pdo ( "mysql : host = localhost; dbname = mydb", $ username, $ password); $ stmt = $ conn-> 준비 ( "username = : username"사용자에서 "선택 *); $ stmt-> bindparam ( ': username', $ username); $ stmt-> execute ();
이 예에서는 매개 변수화 쿼리를 사용하여 사용자 입력 값을 SQL 쿼리 문에 바인딩하여 SQL 주입 공격을 방지합니다. 이 접근법은 입력 값이 실행 된 명령이 아닌 데이터로 취급되어 보안을 크게 향상시킵니다.
사용자 입력을 필터링하고 전처리 문을 사용하는 것 외에도 개발자는 사용자 입력을 확인하고 제한해야합니다. 검증을 통해 사용자가 입력 한 데이터가 기대치를 충족 할 수 있습니다. 제한을 통해 입력 데이터가 너무 길거나 사양을 준수하지 않도록 방지 할 수 있습니다. 간단한 예는 다음과 같습니다.
if (isset ($ _ post [ 'username']) && isset ($ _ post [ 'password'])) { $ username = filter_input ($ _ post [ 'username']); $ password = Filter_Input ($ _ post [ 'password']); // (strlen ($ username) <6 || strlen ($ username)> 20) {사용자 이름과 비밀번호 길이를 확인합니다. echo '유효하지 않은 사용자 이름 길이'; 출구; } if (strlen ($ password) <8 || strlen ($ password)> 20) { echo '유효하지 않은 암호 길이'; 출구; } // 로그인 로직 실행 // ... }
위의 예에서는`strlen ()`함수를 통해 사용자 이름과 비밀번호의 길이를 확인하고 6 ~ 20 자로 제한합니다. 이렇게하면 악의적 인 데이터가 너무 짧거나 너무 긴 입력을 효과적으로 방지 할 수 있습니다.
PHP 코드 주입 취약점은 일반적이고 심각한 보안 위협이지만 입력 필터링, 데이터베이스 쿼리 전처리, 사용자 입력의 확인 및 제한을 통해 이러한 공격을 효과적으로 방지 할 수 있습니다. 이러한 방법이 보안을 향상시킬 수 있지만 웹 사이트 및 사용자 데이터를 더 잘 보호하기 위해 개발자는 보안 보호 지식을 지속적으로 배우고 업데이트하고 최신 보안 기술 및 전략을 채택해야합니다.