programing

mysql_real_escape_string VS 슬래시 추가

megabox 2023. 9. 6. 21:58
반응형

mysql_real_escape_string VS 슬래시 추가

누군가 PHP 매뉴얼에서 이 두 기능의 차이점을 설명해 줄 수 있습니까?

addslashes: 데이터베이스 쿼리 등에서 따옴표로 묶어야 하는 문자 앞에 백슬래시가 있는 문자열을 반환합니다.이러한 문자는 단일 따옴표('), 이중 따옴표('), 백슬래시() 및 NUL(NULL 바이트)입니다.

mysql_real_escape_string:mysql_real_escape_string()MySQL의 라이브러리 함수를 호출합니다.mysql_real_escape_string, 백슬래시를 다음 문자로 바꿉니다. \x00, \n, \r, , , " 및 \x1a.

제가 수집한 바에 의하면, 큰 차이는 \x00, \n \r \x1a인데,addslashes탈출하지 못합니다, 그게 무슨 의미가 있는지 말씀해 주시겠습니까?

당신이 인용하는 것은 아마도 서류에서 나온 것일 것입니다만, 제가 알기로는 그것이 반드시 사실은 아닙니다.

addslashes일반적으로 방해가 되는 문자에 슬래시를 추가합니다.mysql_real_escape_stringMySQL을 탈출해야 하는 모든 것을 탈출합니다.이것은 무엇보다 많거나 적을 수 있습니다.addslashes처리합니다.

또한.mysql_real_escape_string탈출을 위해 반드시 슬래시를 추가하는 것은 아닙니다.그런 식으로 하면 된다고 생각하지만, 최근 버전의 MySQL은 인용문 앞에 슬래시를 붙이는 대신 두 개를 함께 붙여 인용문을 빠져나갑니다.

데이터 공급자의 이스케이프 기능을 사용하는 대신 항상 사용해야 한다고 생각합니다.addslashes,왜냐면addslashes사용하는 목적에 비해 작업량이 너무 많거나 부족할 수 있습니다.반면에.mysql_real_escape_string 쿼리에 포함하기 위한 문자열을 준비하기 위해 수행할 작업을 알고 있습니다.탈출하는 방법에 대한 사양이 변경되고 갑자기 더 이상 사용해야 하는 백슬래시가 아니라고 해도 코드는 여전히 작동합니다.mysql_real_escape_string알고 있을 겁니다

mysql_real_graphics_string()은 데이터베이스에 대한 현재 연결에서 사용되는 문자 집합도 고려합니다.

PHP 함수 mysql_real_sql_string(mysql_real_sql_string)은 동일한 이름의 MySQL C API 함수를 사용합니다. http://dev.mysql.com/doc/refman/5.1/en/mysql-real-escape-string.html

또한 저명한 PHP 보안 전문가 Chris Shiftlett의 addslash()mysql_real_escape_string()을 읽어 보십시오. addslash()를 사용하더라도 SQL 주입 공격을 받을 수 있다는 시연입니다.


다른 사람들은 쿼리 매개 변수를 사용할 것을 권장하며, 그러면 동적 값을 제거할 필요가 없습니다.이것도 추천하지만, PHP에서는 일반 ext/mysql API가 쿼리 매개 변수를 지원하지 않기 때문에 PDO 또는 ext/mysql로 전환해야 합니다.

또한 전체 텍스트 검색의 검색 패턴처럼 동적 문자열 값에 쿼리 매개 변수를 사용할 수 없는 경우도 있습니다.

많은 역사가 있었습니다.mysql_escape_string그리고.mysql_real_escape_string다였습니다. 둘 다 sql 주입 공격의 가능성을 최소화하는 "일반적인" 탈출 메커니즘을 제공하려는 시도였습니다.

mysql_real_escape_string그리고.addslashes당신이 정말로 필요로 하는 것이라면 괜찮아요 -- 하지만 아마 그렇지 않을 겁니다.

@afrazier의 말처럼, 당신은 준비된 진술을 사용해야 합니다.

PDO를 사용하여 쿼리를 준비하는 대신 애플리케이션이 MySQLi를 사용하는 동안 이를 사용할 수 있습니다(주의!"i" at and of Mysql")

$nick = $connect->real_escape_string($nick);
$nick= addcslashes($nick, '%_');

$pass = $connect->real_escape_string($pass);
$pass = addcslashes($pass, '%_');

둘 다 무시하고 매개 변수화된 쿼리만 사용합니다.물론 주사 공격을 좋아하지 않는 한 말입니다.

언급URL : https://stackoverflow.com/questions/3473047/mysql-real-escape-string-vs-addslashes

반응형