2013-04-19 3 views
0

안녕하세요, 모두 실험 중이며 포럼을 구현할 웹 사이트를 만들기 시작했습니다. 웹 사이트에 영향을 미칠 수있는 보안 문제를 조사하기 시작했습니다. 사이트 간 스크립팅 및 SQL 주입 공격과 같은 영역.SQL 인젝션 공격 방지

모든 HTML 태그를 제거하는 연구에서 XSS가 방지됩니다. SQL 특수 문자를 제거하여 SQL 주입 공격을 막을 수 있습니까?

<?php 
require "dbconn.php"; 

$mnam = strip_tags($_GET['blogentername']); 
$mcom = strip_tags($_GET['blogmessage']); 
$approve = 'N'; 
$dte = gmdate("d-M-Y H:i:s"); 

$mnam = mysql_real_escape_string($user); 
$mcom = mysql_real_escape_string($mcom); 

$query = "INSERT INTO blogentry VALUES ('".$mnam."','".$dte."','".$mcom."','".$approve."','','')"; 

$results = mysql_query($query) 
      or die(mysql_error()); 

header('Location:messages.php?messagesent=1'); 

?> 

덕분에 당신을 위해 시간 앤디

+0

코드에 SQL 특수 문자가 제거되지 않습니다. 나는 "SQL 특수 문자"같은 것이 없다고 말하고 싶습니다. –

+0

OWASP를 읽는 것이 좋습니다 – Esailija

+0

HTML을 만들 때 XSS가 ** ** 텍스트를 올바르게 인코딩하는 것을 방지하는 방법이 있습니다. – SLaks

답변

0

코드에 대해 - 예, 꽤 안전하고 뚫을 수 없습니다.

그러나 SQL 주입을 방어하려는 생각은 일반적으로 매우 잘못되었습니다.

코드에 "SQL 특수 문자 제거"가 없습니다. 그리고 그러한 스트리핑에는 전혀 문제가 없습니다.
문자열이 인 경우 이라고하면 적절하게 으로 형식화 된 인 경우 매우 안전합니다. 그러나 다른 모든 SQL 리터럴의 경우 "스트립 핑"이라고하는 것은 실제로 아무 것도 제거하지 않습니다.

+0

조언 주셔서 감사합니다 – user2141414

0

당신은 태그를 제거해서는 안 모두. 데이터베이스 원시에 저장 한 다음 브라우저에 출력 할 때 htmlspecialchars을 사용하십시오.

+0

귀하의 조언을 주셔서 감사합니다 – user2141414

+0

나는 이것이 매우 건전한 조언이라고 생각하지 않습니다. 사용자가 데이터베이스에서 검색되는 정보를 제어 할 수 있다는 점을 잊어 버릴 수 있지만 데이터베이스에 데이터를 삽입하는 동안 사용자가 데이터를 제어한다는 것을 쉽게 알 수 있습니다. 왜 둘 다하지 않습니까? –

0

SQL 명령을 작성하기 위해 문자열 연결을 사용하지 않는 것이 가장 좋습니다.

매개 변수화 된 쿼리를 사용하십시오. 본질적으로 훨씬 안전하며 동일한 유형의 명령문을 여러 번 수행 할 때 성능을 향상시키기 위해 데이터베이스 엔진에서 최적화 할 수 있습니다.

여기에 예제가있는 추가 정보 : How can I prevent SQL injection in PHP?

+0

불행히도, 우리는 연결을 피할 수 없습니다. 따라서, 규칙을 아는 것이 더 낫다. –

+0

일반적인 웹 애플리케이션에서 동일한 유형의 문장을 여러 번 수행하면 불량한 디자인 냄새가 난다 –

+0

데이터 세트를 반복하면서 INSERT 또는 UPDATE를 수행 할 때 종종 수행된다. SQL 문은 한 번 준비되고 전체 SQL 문을 재평가 할 필요가 없기 때문에 루프를 통해 매번 값이 전달되어 신속하게 실행됩니다. http://stackoverflow.com/questions/1318023/performance-of-parameterized-queries-for-different-dbs 및 http://stackoverflow.com/questions/1851834/why-is-using-a-parameterized-query를 참조하십시오. 더 많은 정보를 얻으려면 테이블에 삽입 데이터보다 빠릅니다. – diamondsea