program story

문자열을 이스케이프한다는 것은 무엇을 의미합니까?

inputbox 2020. 11. 1. 17:42
반응형

문자열을 이스케이프한다는 것은 무엇을 의미합니까?


나는 읽고 있었다 합니까 $ _SESSION을 [ '이름'] SQL 쿼리에 들어가기 전에 이스케이프 할 필요가? "원본에 관계없이 SQL 쿼리에 전달하는 모든 문자열을 이스케이프해야합니다."라고 말했습니다. 이제 저는 이와 같은 것이 정말 기본이라는 것을 압니다. Google 검색에서 2 만 개가 넘는 결과가 나타났습니다. Stackoverflow만으로는 20 페이지의 결과가 있었지만 실제로 문자열 이스케이프가 무엇인지 또는 어떻게 수행하는지 설명하는 사람은 없습니다. 그냥 가정합니다. 도와주세요? 언제나처럼 PHP로 웹 앱을 만들고 있기 때문에 배우고 싶습니다.

나는 보았다 : Inserting Escape Characters , Java의 모든 이스케이프 문자무엇입니까? , addcslashes ()와 문자열 탈출 질수 , 이스케이프 문자를 , 는 mysql_real_escape_string 무엇을 () 정말이야? , PHP의 문자열에서 큰 따옴표를 어떻게 이스케이프 할 수 있습니까? , MySQL_real_escape_string이 슬래시를 추가하지 않습니까? , PHP의 문자열에서 이스케이프 시퀀스 제거 계속할 수 있지만 요점을 알 수 있습니다. 이것은 게으름이 아닙니다.


문자열 이스케이프는 해당 문자열에 사용 된 따옴표 (및 기타 문자)의 모호성을 줄이는 것을 의미합니다. 예를 들어, 문자열을 정의 할 때 일반적으로 큰 따옴표 나 작은 따옴표로 묶습니다.

"Hello World."

하지만 내 문자열에 큰 따옴표가 있으면 어떻게 될까요?

"Hello "World.""

이제 모호함이 있습니다. 인터프리터는 내 문자열이 끝나는 위치를 모릅니다. 큰 따옴표를 유지하려면 몇 가지 옵션이 있습니다. 내 문자열 주위에 작은 따옴표를 사용할 수 있습니다.

'Hello "World."'

또는 내 따옴표를 벗어날 수 있습니다.

"Hello \"World.\""

슬래시가 앞에 오는 따옴표는 이스케이프 처리 되며 문자열 값의 일부로 이해됩니다.

쿼리와 관련하여 MySQL에는 혼란을 일으키지 않고 쿼리에 사용할 수없는 특정 키워드가 있습니다. 열 이름이 "Select"인 값 테이블이 있고이를 선택한다고 가정합니다.

SELECT select FROM myTable

이제 쿼리에 약간의 모호성을 도입했습니다. 쿼리 내에서 백틱을 사용하여 모호성을 줄일 수 있습니다.

SELECT `select` FROM myTable

이것은 필드 이름을 선택할 때 잘못된 판단을 사용하여 도입 한 혼란을 제거합니다.

이 중 많은 부분은 단순히 .NET을 통해 값을 전달하여 처리 할 수 ​​있습니다 mysql_real_escape_string(). 아래 예에서는 쿼리에 문제가 발생하지 않도록이 함수를 통해 사용자가 제출 한 데이터를 전달하고 있음을 알 수 있습니다.

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

다른 방법은 같은 이스케이프 문자열, 존재 add_slashes, addcslashes, quotemeta등, 목표로, 안전한 쿼리를 실행하고 많은 개발자들이 선호 할 때 찾을 수 있습니다 불구하고 mysql_real_escape_string또는 pg_escape_stringPostgreSQL의 맥락에서 (.


일부 문자는 사용중인 SQL 데이터베이스에 특별한 의미가 있습니다. 이러한 문자가 쿼리에 사용되면 공격자가 데이터베이스를 손상시키는 것을 포함하여 예상치 못한 및 / 또는 의도하지 않은 동작을 유발할 수 있습니다. 이러한 문자가 이러한 방식으로 쿼리에 영향을주지 않도록하려면 이스케이프 처리하거나 다른 방식으로 말하려면이 쿼리에서 특수 문자로 처리하지 않도록 데이터베이스에 지시해야합니다.

의 경우 mysql_real_escape_string()는 탈출 \x00, \n, \r, \, ', "\x1a이들로, 탈출하지 않는 경우, MySQL 데이터베이스와 SQL 주입을 포함하는 이전에 언급 한 문제가 발생할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/10646142/what-does-it-mean-to-escape-a-string

반응형