PHP萬能密碼的實際作用分析
關于PHP的安全問題,一直是程序員們探討的話題。如何能夠保證程序的安全性,決定了帷幕代碼質量的高低。說實話如果一個網(wǎng)站的前臺都是注入漏洞,那么憑經(jīng)驗,PHP***密碼進后臺的幾率基本上是***。#t#
可是有的人說對PHP的站如果是GPC魔術轉換開啟,就會對特殊符號轉義,就徹底杜絕了PHP注入。其實說這話的人沒有好好想過,更沒有嘗試過用***密碼進PHP的后臺。
其實GPC魔術轉換是否開啟對用PHP***密碼進后臺一點影響也沒有。如果你用這樣的***密碼'or'='or',當然進不去,理由是GPC開啟的時候單引號會被轉換。PHP注入時我常用的PHP***密碼是:'or 1=1/*.
那我們分析一下為什么這可以進后臺。如果sql語句這樣寫:"SELECT * FROM admin where name='".$_POST['name']."'andpassword='".$_POST['password']."'",那我們在帳號處輸入***密碼'or 1=1/*,密碼隨便輸,sql語句就成了select * from admin where name='’or 1=1/*' and password='任意字符'。/*為mysql的注釋符,這樣后面的東西就都被注釋掉了,也就是為什么密碼隨便輸?shù)脑颉?/p>
假設GPC轉換沒有開啟,那么請看:where name='’or 1=1(*/后面的東西被注釋掉了),name='’的邏輯值為假,而后面的1=1邏輯值則為真,對于整體就成了假 or 真,最終的邏輯值還是真,就進后臺了。
那么如果GPC轉換開啟了,就對單引號進行了轉換。語句就變成了where name='\’or 1=1,在看一下和剛才有什么區(qū)別,無非是多了個\。name='\'與name=''的邏輯值一樣,都為假,那1=1為真,總的sql語句的邏輯值不還是真嗎?那有進不去后臺的理由嗎?
所以總的來說,PHP***密碼可以這樣寫:'or 1=1/*,而GPC轉換是否開啟對它沒有任何影響!所以請改變你的想法:存在字符型注入的php網(wǎng)站是可以用***密碼'or 1=1/*的