上文說到數據庫自帶的不安全輸入過濾功能,但這樣的功能不是所有數據庫都有的。目前大概只有MySQL,SQLite,PostgreSQL,Sybase帶有這樣的功能,而包括Oracle和SQL Server在內的 " /> 免费人成,免费成人黄色网址,日日骚一区

四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

PHP與SQL注入攻擊[三]

這幾天太忙,繼續(xù)連載哈哈,爭取半個月結束。

上文說到數據庫自帶的不安全輸入過濾功能,但這樣的功能不是所有數據庫都有的。目前大概只有MySQL,SQLite,PostgreSQL,Sybase帶有這樣的功能,而包括Oracle和SQL Server在內的很多數據庫都沒有。

鑒于這樣的情況,一般開發(fā)者采用一種通用的方法來避免不安全的數據寫入數據庫--base64編碼。這樣可以避免所有可能引起問題的特殊字符造成的危險。但Base64編碼后的數據容量大概會增加33%,比較占用空間。在PostgreSQL中,使用Base64編碼數據還有個問題,就是無法使用'LIKE'查詢。

所以總結這么多,我們知道光靠數據庫自身的字符串屏蔽也是不行的。我們需要一種解決方案,在特殊字符影響到我們的Query語句之前,就把危險的字符過濾掉。預定義查詢(Prepared queries/prepared statements)是一個非常好的方法。什么是預定義查詢呢? 它就相當于一個查詢語句的模板,定義了查詢語句的結構和某些部份的數據類型。如果我們提交的SQL語句符合這個模板的定義,就執(zhí)行,否則就不執(zhí)行,報出錯誤。

例如:

pg_query($conn, “PREPARE stmt_name (text) AS SELECT * FROM users WHERE name=$1”);
pg_query($conn, “EXECUTE stmt_name ({$name})”);
pg_query($conn, “DEALLOCATE stmt_name”);

PREPARE stmt_name (text) AS ..定義了一個查詢的格式,這里除了$1之外的所有字符都是占位符,不允許更改。呵呵,我覺得這種方法實在是個好方法。不過可惜不是所有數據庫都支持。。

php技術PHP與SQL注入攻擊[三],轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 春江花月夜理解性默写及答案| 叶子淳| 护校队申请书| 二胡演奏曲大全视频| 南营洞1985| 东北一家人第一部| 寄宿公寓的女郎| 欲情电影在线观看| 真濑树里| 海南岛全景图| 风云太白山电影| 凤凰卫视资讯台直播| 日本十大歌姬排名| 汽球造型| 陈德烈| 追捕演员表名单| 江南好简谱| 久久日韩精品嫩草影院| 恩齐| 三年电影免费完整版| 黄漪钧| 可隆衣服属于什么档次| 激情戏车震| 将夜2第二季免费观看| 永不瞑目演员表| 孕妇照几个月拍最好| 鲜于善| 愚人节快乐的英文| 冬春之交电影| 电影白上之黑| 成年奶妈| karina hart| 今天cctv6节目表| 1988田螺姑娘| 卫星掉落| 女人香韩国电影| 亚洲狠狠爱| 浪人街| 金馆长对金馆长对金馆长 电影| 最危险的游戏| 木偶人|