2011-03-04 4 views
1

가능한 중복 : mysqli_real_escape_string을 사용하여 쿼리 문자열을 보호 할 수 있습니까?


Are dynamic mysql queries with sql escaping just as secure as prepared statements?

이 사용하는 경우에만 mysqli_real_escape_string 쿼리를 확보하기에 충분? 또는 데이터베이스를 안전하게 쿼리 할 때 고려해야 할 사항이 더 있습니까?

+0

@irc I *가 그것에 대해 연구 중이다. 지금 내가 한 말 때문에 대답을 사용할 수도 있습니다. – NullUserException

+0

준비된 문을 사용할 수 있습니다. ircmaxwell의 의견에 대한 링크를 따라 가십시오. – NullUserException

+0

당신이하고있는 일의 예를 보여줄 수 있습니까? –

답변

2

어디서나 올바르게 사용되는 경우 real_escape_string은 옵션입니다. 다음 코드를 고려하십시오.

$page = $_GET['page']; 
$sql = 'SELECT `name` FROM `user` WHERE `id` = ', mysqli_real_escape_string($page); 

안전하지 않습니까? real_escape_ 문자열은 따옴표 안에 문자열을 이스케이프하는 데에만 사용할 수 있습니다. $page1 OR id IN (2,3,4,5,6,7,8,9) 일 수 있습니다. → 실제 인용 부호는 사용하지 않습니다. 올바른 데이터 유형 (int)으로 캐스팅하면이 경우 도움이 될 수 있습니다. 당신은 준비된 진술을 사용하는 편이 나을 것이므로, 잘못 사용하는 것은 쉽지 않다.

+1

그래서 절대 정수를 * 이스케이프해서는 안됩니다. 당신은 언제나 타입을 명시 적으로 캐스팅하거나 시행해야한다 ... – ircmaxell

+0

mysqli_real_escape_string() 함수는 일반적으로 데이터베이스 인수에 대한 연결을 필요로하지 않는다? –

+1

@ SébastienGarcia-Roméo : 기본적으로 현재 활성화 된 연결을 사용합니다. (가장 최근에 열어 본 것 같습니다) – knittl

관련 문제