mysql使用set names gbk形式來規定字符集的危害

緣由: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

相關文章
相關標籤/搜索