緣由:php語言針對字符串是以字節的形式來處理的,如「誠」gbk編碼則表示爲0xdc0x5c,而0x5c則表示‘\’,故輸入「誠」(或直接輸入0xdc0x5c,下同含義)時,即輸入了0xdc0x5c——0xdc\,依照魔術引號過濾後爲「誠\」,若輸入「誠'」,則會處理爲「誠\\'」,結果爲多了個單引號,另mysql中/* */表示塊級註釋,#可註釋單行。php
綜上,可知,若以set names gbk或其它多字節編碼形式規定字符集則存在明顯的sql注入漏洞。(單字節站點則無懼該風險)mysql
解決方法:自定義字符集,如set character_set_connection=gbk,character_set_results=gbk,set character_set_client=binary;設置gbk格式的鏈接字符集和返回結果字符集,二進制的客戶端發送字符集。sql