Latest web development tutorials

SQLite는 주입

당신의 웹 사이트는 SQLite 데이터베이스에 입력하고, 입력에 사용자를 허용하는 경우, 당신은 안전 문제에 직면하는이 시간은 SQL 주입으로 알려져있다. 이 장에서는이를 방지하는 방법, 그리고 보안 스크립트 SQLite는 문을 보장하는 방법을 보여줍니다.

사용자 이름을 입력해야하는 등, 사용자의 입력을 요구하는 경우, 주입은 일반적으로 발생하지만, 사용자는 SQLite는 성명을 입력하고 있으며,이 사항이 무의식적으로 데이터베이스에 대해 실행한다.

신뢰 사용자가 제공 한 데이터, 그렇게 만 검증 데이터 처리 규칙은 패턴 매칭 수행하지 마십시오. 이러한 규칙을 수정할 필요에 따라 - 다음 예에서 사용자 이름 사용자 이름은 영숫자 문자 또는 밑줄로 제한되어, 길이는 8-20 자 사이 여야합니다.

경우 (는 preg_match ( "/ ^ \ w {8,20} $ /", $ _GET은 [ '사용자 이름'], $)가 일치) {
   $ DB = 새위한 SQLiteDatabase ( '파일 이름');
   $ = @ $ DB-> 쿼리 결과 ( "사용자 SELECT * FROM WHERE 이름 = $ 일치 [0]");
} 그밖에 {
   에코 "사용자 이름 허용되지 않습니다";
}

이 문제를 설명하기 위해,이 가설 발췌 생각이 발췌을 고려, 문제를 설명하기 위해 :

$ 이름 = "카디르 '; 사용자에서 삭제;";
@ $ DB-> 쿼리 ( "사용자 SELECT * FROM WHERE 이름 = '{$ 이름}'");

사용자 지정된 이름 열 이름을 검색하는 함수 호출은 유저 테이블의 레코드를 일치한다. 정상적인상황에서, $ 이름은 문자열 일리아와 같은 영숫자 문자와 공백을 포함하고 있습니다.$ 이름이 새 쿼리를 추가로 그러나 여기, 데이터베이스에 대한 호출은 심각한 문제를 일으킬 : 사용자의 모든 기록을 삭제하는 DELETE 쿼리를 주입.

당신은 문자열의 실행을 제공하는 쿼리, 다음 호출이 실패하지만, SQLite는과 PostgreSQL는 여전히 쿼리에 적층을, 스택하려고하면, 하나의 함수 호출에 여러 쿼리를 적재 쿼리 또는 데이터베이스 인터페이스를 실행이 허용되지 않지만 모든 쿼리, 심각한 보안 문제가 발생할 수 있습니다.

방지 SQL 주입

이러한 PERL과 PHP와 같은 스크립트 언어에서는 능숙하게 이스케이프 문자를 모두 처리 할 수 ​​있습니다. PHP는 특수 문자 입력을 탈출하는 데 사용되는 SQLite는 프로그래밍 언어 문자열 함수의sqlite_escape_string ()를 제공합니다.

경우 (들이지 ()) 
{
  $ 이름 = sqlite_escape_string ($ 이름);
}
$ = @ $ DB-> 쿼리 결과 ( "사용자 SELECT * FROM WHERE 이름 = '{$ 이름}'");

데이터가 삽입 안전하게 만든 있도록 인코딩되어 있지만 간단한 텍스트 비교를 렌더링되지만 절은 사용할 수 없습니다 LIKE 쿼리에서열은 이진 데이터가 포함되어 있습니다.

데이터를 검색 할 때 이상한 결과로 이어질 것입니다, addslashes ()가 SQLite는 쿼리 문자열에서 참조 수 없습니다 양해 해 주시기 바랍니다.