2 回答

TA貢獻1856條經驗 獲得超17個贊
轉義字符串意味著減少該字符串中使用的引號(和其他字符)的歧義。例如,當您定義字符串時,通常用雙引號或單引號括起來:
"Hello World."
但是,如果我的字符串中有雙引號怎么辦?
"Hello "World.""
現(xiàn)在我有歧義 - 翻譯不知道我的字符串在哪里結束。如果我想保留雙引號,我有幾個選擇。我可以在我的字符串周圍使用單引號:
'Hello "World."'
或者我可以逃避我的報價:
"Hello \"World.\""
任何以斜杠開頭的引用都將被轉義,并被理解為字符串值的一部分。
在查詢時,MySQL有一些它所監(jiān)視的關鍵字,我們不能在查詢中使用它們而不會造成一些混淆。假設我們有一個值表,其中一列被命名為“Select”,我們想要選擇:
SELECT select FROM myTable
我們現(xiàn)在已經在查詢中引入了一些含糊之處。在我們的查詢中,我們可以通過使用反向標記來減少這種模糊性:
SELECT `select` FROM myTable
這消除了我們通過在選擇字段名稱時使用不良判斷而引入的混淆。
只需傳遞您的值,就可以為您處理很多這樣的事情mysql_real_escape_string()。在下面的示例中,您可以看到我們通過此函數(shù)傳遞用戶提交的數(shù)據(jù),以確保它不會導致我們的查詢出現(xiàn)任何問題:
// 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,和更多的,但你會發(fā)現(xiàn),當我們的目標是運行安全的查詢,由大開發(fā)商喜歡mysql_real_escape_string或pg_escape_string(在PostgreSQL中的上下文。

TA貢獻1995條經驗 獲得超2個贊
某些字符對您正在使用的SQL數(shù)據(jù)庫具有特殊含義。在查詢中使用這些字符時,它們可能會導致意外和/或意外行為,包括允許攻擊者危害您的數(shù)據(jù)庫。為了防止這些字符以這種方式影響查詢,需要對其進行轉義,或者以不同的方式說明,需要告知數(shù)據(jù)庫不要將它們視為此查詢中的特殊字符。
在的情況下mysql_real_escape_string()
,它避開\x00
,\n
,\r
,\
,'
,"
和\x1a
作為這些中,當沒有逃脫,可引起前面提到的問題,其包括與一個MySQL數(shù)據(jù)庫的SQL注入。
添加回答
舉報