2013-11-25 4 views
0

DB에 레코드를 삽입하는 스크립트를 작성했습니다. 내가 얻는 유일한 문제는 ' 문자가 들어있는 데이터를 저장하려고 할 때 스크립트가 작동하지 않고 DB에 아무 것도 저장하지 않는 경우입니다. 예 : John's Birthday, Amy's Home'과 같은 특수 문자를 허용하는이 문제에 대한 해결책은 DB에 저장하고 보안에 아무런 해를 끼치 지 않고 검색 할 수 있습니까?들어있는 문자열을 삽입 할 수 없습니다 '

mysqli_query($con,"INSERT INTO Story (desc) 
VALUES ('$mytext')"); 
+0

@KA_lin 해결책이 아니며,'addslashes()는 '문자()'mysqli_real_escape_string,'달리 인식 설정되지 않은 원유 수정합니다. –

+0

@MikeW 만약 내가 mysqli_real_escape_string ($ con, $ mytext); 그렇다면 SQL 인젝션의 희생자가 될 수 없다. 등이있다. 또한 검색하면 보안에 아무런 해가되지 않습니다. – user3027531

+0

mysqli_real_escape_string()은 특별히이 목적으로 제공된다. 입력을 적절히 벗어나면 SQL 인젝션 공격의 희생자가 될 가능성이 적습니다. 나는 결코 '결코'라고 말하지 않을 것입니다. 왜냐하면 당신이 도망 치거나 준비된 진술을 사용한다고하더라도 2 단계 주입 공격이 때때로 가능하기 때문입니다. 그것은 당신의 코드에 달려 있습니다. –

답변

1

PHP의 mysqli_real_escape_string은이 목적으로 특별히 제작되었습니다. 문제는 따옴표가 값 대신 쿼리의 일부로 MySQL에 의해 해석된다는 것입니다. 이 같은 문자를 이스케이프 처리하여 쿼리에 영향을주지 않아야합니다. 이것이 바로 SQL 주입입니다.

$mytext = mysqli_real_escape_string($con, $mytext); 
// continue with your query 

설명서 : PDO를 사용 http://php.net/manual/en/mysqli.real-escape-string.php

+0

흥미로운 점은'mysqli_real_escape_string ($ con, $ mytext);를 사용하면 SQL 인젝션의 희생자가 될 수 없다는 것입니다. 등 – user3027531

+0

아니,하지만 시작이야. 자세한 내용은 설명서를 참조하십시오. http://php.net/manual/en/security.database.sql-injection.php –

관련 문제