문자열을 이스케이프한다는 것은 무엇을 의미합니까?
나는 읽고 있었다 합니까 $ _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
'program story' 카테고리의 다른 글
| Pascal Case를 문장으로 변환하는 가장 좋은 방법 (0) | 2020.11.01 |
|---|---|
| 긴 상수 목록을 Python 파일로 가져 오기 (0) | 2020.11.01 |
| 양방향 SSL 설명 (0) | 2020.11.01 |
| javascript node.js가 Google 앱 엔진에없는 이유 (0) | 2020.11.01 |
| 로컬 호스트가 아닌 요청을 수신하도록 kestrel 웹 서버를 얻으려면 어떻게해야합니까? (0) | 2020.11.01 |