PHP 초보자를 위한 데이터베이스 보안
1.SQL 인젝션 방지
소위 SQL 인젝션은 웹 양식에 SQL 명령을 삽입하여 도메인 이름이나 쿼리 문자열을 제출하거나 입력하는 것입니다. 페이지를 요청하고 궁극적으로 서버를 속여 악성 SQL 명령을 실행하게 합니다.
우리는 사용자가 입력한 데이터를 절대 신뢰해서는 안 됩니다. 우리 모두는 사용자가 입력한 데이터를 필터링해야 합니다.
예를 들어, 등록하려면 사용자는 사용자 이름, 비밀번호 등을 입력해야 합니다.
이 데이터를 받으면 먼저 판단할 것입니다. 첫 번째는 js를 사용하여 판단할 수 있습니다. 모든 내용이 입력되고 적법한 경우에는 사용자 이름과 같은 수신된 정보를 데이터베이스에 쿼리하고 이를 기반으로 판단해야 합니다. 양식에 제출된 사용자 이름 정보가 있으면 등록이 허용되지 않습니다. 정규식을 사용하여 형식을 제어할 수도 있습니다. 예를 들어 중국어 또는 영어만 가능하며 몇 글자를 초과할 수 없습니다. 잠깐
양식으로 제출된 데이터도 필터링할 수 있습니다
SQL 주입을 방지하려면 다음 사항에 주의해야 합니다.
· 1. 사용자 입력을 절대 신뢰하지 마세요. 사용자의 입력을 확인하려면 정규식을 사용하거나 작은따옴표와 큰따옴표 등을 변환하여 길이를 제한할 수 있습니다.
· 2. SQL의 동적 어셈블리를 사용하지 마십시오. 매개변수화된 SQL을 사용하거나 데이터 쿼리 및 액세스에 직접 저장 프로시저를 사용할 수 있습니다.
· 3. 관리자 권한으로 데이터베이스 연결을 사용하지 마십시오. 각 애플리케이션에 대해 제한된 권한을 가진 별도의 데이터베이스 연결을 사용하십시오.
· 4. 기밀 정보를 직접 저장하지 말고, 비밀번호 및 민감한 정보를 암호화하거나 해시 처리하지 마십시오.
· 5. 애플리케이션의 예외 정보는 가능한 한 힌트를 적게 제공해야 합니다. 사용자 정의 오류 정보를 사용하여 원래 오류 메시지를 래핑하는 것이 가장 좋습니다.
· 6. SQL 삽입 감지 방법 일반적 , 보조 소프트웨어 또는 웹사이트 플랫폼은 일반적으로 SQL 주입 탐지 도구인 jsky를 사용하며 웹사이트 플랫폼에는 Yisi 웹사이트 보안 플랫폼 탐지 도구가 있습니다. MDCSOFT SCAN 등 MDCSOFT-IPS를 사용하면 SQL 주입, XSS 공격 등을 효과적으로 방어할 수 있습니다.
SQL 주입 방지
Perl, PHP 등의 스크립트 언어에서는 SQL 주입을 방지하기 위해 사용자가 입력한 데이터를 Escape합니다.
PHP의 MySQL 확장은 특수 입력 문자
<?php if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM users WHERE name='{$name}'"); ?>
Like 문
like 쿼리에 삽입을 이스케이프하는 mysql_real_escape_string() 함수를 제공합니다. 사용자가 "_" 및 "%"를 포함하여 입력하면 다음 상황이 발생합니다. 사용자는 원래 "abcd_"만 쿼리하려고 했지만 쿼리 결과에는 "abcd_", "abcde", "abcdf" 등이 포함됩니다. 사용자가 "30%"(참고: 30%)를 쿼리하려는 경우에도 문제가 발생합니다.
PHP 스크립트에서는 다음 예와 같이 addcslashes() 함수를 사용하여 위 상황을 처리할 수 있습니다.
<?php $sub = addcslashes(mysql_real_escape_string("%something_"), "%_"); // $sub == \%something\_ mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'"); ?>