2013-05-29 2 views
0

나는 SQL 주입 구멍을 확인하고 수정하려고 노력 중이다. 나는 여러 곳에서 pdo/prepared statement로 변환했다.htaccess의 mod_rewrite가 주입을 방지합니까?

그러나, 우리는 다음과 같습니다 한 페이지가 : htaccess로에서

www.site.com/domain/products/12345/description-of-the-product 

을이가로 다시 작성 :

www.site.com/domain/product.php?id=12345 

htacess은 다음과 같습니다

RewriteRule ^(.*)/products/([0-9]+)/([^/\.]+)/?$ /$1/product.php?id=$2 [L] 

그래서, 여기 내 질문 : URL이 modtelewrite 함께 재 작성되고, 이는 단지 ingtegers에 대해 일치하는, 나는 이게 SQL 인젝션에 대한 보호일까요? 정수 이외에 다른 URL을 시도하면 페이지가 존재하지 않고 mod_rewrite가 활성화되지 않았기 때문에 사용자는 404 오류를 받게됩니다.

미리 감사드립니다.

+0

당신은 SQL 주입과 xss 주입에 대해 말하고 있습니까?등록 전역 (즉, 다른 밀레니엄에서 온 것입니다)을 등록하지 않으면 uri와 SQL 엔진 사이에 직접적인 관계가 없습니다. PHP에서 이드를 직접 파싱하고 있습니까? – Sebas

+1

주소 표시 줄에 www.site.com/domain/product.php?id=12345 '를 입력하십시오.'; DROP TABLE 멤버; -? – claustrofob

+0

@claustrofob 다시 쓰기 규칙을 실행하지 않겠습니까? –

답변

0

없음은 악의적 인 사용자는 단순히 URL

www.site.com/domain/product.php?id=123'; DROP TABLE products; 

에 가서 완전히 당신의 mod_rewrite를 우회 할 수 없기 때문에. 정수만 재 작성 되더라도 사용하기 위해 다시 작성되는 URL은 여전히 ​​유효하며 액세스 할 수 있습니다. 당신은 당신이 모든 입력 그것은 당신의 URL 청소기를 만드는 PDO 등

0

아니오. 우리는 준비된 문을 통해 수행 될 SQL 주입에 대해 얘기하고 경우에 그래서 사실, 어쩌면,하지만 당신에 의존해야 기능이 제대로 주입을해야한다 방지 코드를 탈출하고 있습니다. 문자가 삽입 되어도 문제가 발생할 수 있으므로 충분하지 않을 수도 있습니다.

당신은 검증에 대해 원하는 것을 사용할 수 있으며, URL의 재 작성이 매우 좋을 수 있지만 어떤 수단이 제대로 준비 파라미터 희망을 (쿼리 매개 변수를 탈출하는 단계를 생략 할 수 있도록로하지 않습니다 진술).

0

번호를 사용하여 그 시점에서 귀하의 요청에가는 소독해야 SQL 쿼리를하고있다,하지만 여전히 PHP 코드의 어떤 시점에서 텍스트 정보를 보내는 모든 시간 데이터베이스로 보낼 수 있습니다. 그래서 보안이 필요합니다.

당신은 mysqli_real_scape_string($_GET['id')를 사용하거나 How can I prevent SQL injection in PHP?에 언급 된 다른 방법을 사용하여 그것을 할 수 있습니다.

+0

mysqli_real_scape_string은 주사 나 보안 문제와 아무런 관련이 없음 –

+0

SQL 삽입을 방지하는 데이터를 보호한다. (틀린 것이 아니라면 "문자열의 문자"를 이스케이프 처리한다) – zurfyx

0

는 입력 데이터 검증 및 SQL 서식을 혼동하지 마십시오!

이 두 문제는 혼합해서는 안됩니다.

적절한 SQL 서식이없는 어떤 보호가 아니라 단순한 SQL 구문 규칙이 필요합니다. prepared statement는 구문 적으로 정확한 쿼리를 보장 할 수있는 도구입니다. 그러나 일관되고 무조건 사용되는 경우에만 모든 이익을 얻을 수 있습니다.

관련 문제