Latest web development tutorials

MySQL과 SQL 주입

웹을 통해 사용자가 입력 한 데이터를 얻고 MySQL 데이터베이스에 삽입하면, 그것은 SQL 인젝션 가능한 보안 문제이다.

이 섹션에서는 SQL 주입을 방지하는 방법, 그리고 스크립트에서 SQL 주입 문자를 필터링 당신을 말할 것이다.

소위 SQL 주입, 악의적 인 SQL 명령을 실행하는 서버를기만 궁극적으로 제출하거나 도메인 이름 또는 페이지 요청 쿼리 문자열을 입력하고 웹 형태로 SQL 명령을 통해입니다.

우리 절대 신뢰 사용자 입력, 우리는 안전하지 않은 사용자에 의해 입력되는 데이터를 식별해야 우리 사용자 입력 데이터를 필터링 처리를위한 모든 필요하다.

다음의 예, 사용자 이름은 문자, 숫자 및 밑줄의 조합이어야 입력하고 사용자 이름의 길이는 8-20 자 사이 :

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

특수 문자가 표시에는 SQL 필터가 없을 때의 상황을 살펴 보자 :

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

사출 문 위에, 우리는 변수 $ 이름, 우리는 사용자 테이블에있는 모든 데이터를 삭제 할 SQL 문장을 삽입하지 않아도 $ 이름을 필터링하지 않는다.

PHP ()에서 상 mysql_query 여러 SQL 문을 실행 할 수 없습니다 만, 이러한 데이터의 사용자는 우리가 엄격한 검증이 필요하므로 SQLite는과 PostgreSQL에서 동시에 여러 SQL 문을 실행할 수 있습니다.

SQL 주입을 방지, 우리는 다음 사항에주의해야합니다 :

  • 1. 절대 신뢰 사용자 입력. 사용자 입력의 검증, 당신은 정규 표현식을 사용하거나 길이 제한, 단일 및 이중 따옴표를 "-"전환.
  • 2. 절대로 당신은 데이터 쿼리 액세스를 위해 SQL의 직접 사용의 매개 변수 또는 저장 프로 시저를 사용하여 동적 어셈블리 SQL을 사용하지 않습니다.
  • 3. 관리자 권한 데이터베이스 연결을 사용하지 않는 각 응용 프로그램 데이터베이스 연결을 위해 제한된 개별 권한을 사용하지 마십시오.
  • 4. 직접 기밀 정보를 저장, 암호화 또는 암호와 민감한 정보를 해시하지 마십시오.
  • 5. 응용 프로그램 예외 정보는 사용자 지정 오류 메시지 오류 메시지 원래의 포장을 사용하려면 몇 프롬프트로 가장된다 주어져야한다
  • 일반 또는 지원하는 소프트웨어 플랫폼에서 검출 6.sql 주입 사이트는 감지 일반적으로 SQL 주입 탐지 도구 jsky, 인터넷 사이트 웹 사이트를 사용하는 소프트웨어 보안 플랫폼 탐지 도구가 억 생각. MDCSOFT SCAN 좋아. MDCSOFT-IPS를 사용하면 효과적인 방어 SQL 인젝션, XSS 공격 할 수있다.

방지 SQL 주입

펄 및 SQL 주입을 방지하기 위해 사용자가 입력 한 데이터를 탈출 할 수 PHP와 같은 스크립팅 언어.

PHP MySQL 확장 특수 문자 입력을 탈출는 mysql_real_escape_string () 함수를 제공합니다.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

문 주사처럼

사용자가 값 "_"및 "%"를 입력하면 쿼리처럼,이 문제가 발생합니다 : 사용자는 단지 쿼리 "abcd_"이 쿼리 결과를하려고했다 "ABCD _", "ABCDE", "abcdf" 문제가있는 것, 등 사용자가 "30 %"(30 % 주) 쿼리합니다.

PHP 스크립트에서는, 상기의 경우,하기 실시 예를 처리하기 위해) (addcslashes 펑션 사용할 수있다 :

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes () 함수는 이전에 백 슬래시로 지정했습니다.

구문 :

addcslashes(string,characters)
매개 변수 기술
필요합니다. 지정된 문자열을 확인합니다.
등장 인물 선택 사항. addcslashes에 의해 규정 () 문자 또는 문자 범위에 영향을 미칩니다.

당신은 특정 응용 프로그램을 볼 수 는 PHP addcslashes를 () 함수