在php語言中,單引號和雙引號都可以表示乙個字串,但是對於雙引號來說,可能會對引號內的內容進行二次解釋,這就可能會出現安全問題。
舉個簡單例子
<?php
$a = 1;
$b = 2;
echo '$a$b';//輸出結果為$a$b
echo "$a$b";//輸出結果為12
?>
可以看到這兩個輸出的結果並不相同。
在雙引號中倘若有${}出現,那麼{}內的內容將被當做**塊來執行。
可以看到成功執行了phpinfo()
試想一下,倘若在乙個cms的後台,可以修改資料庫的配置檔案,且配置檔案中的值用雙引號包括,我們雖然也可以直接閉合**達到getshell的後果,但是如果cms對傳遞的引數進行了addlashes()處理的話,我們就無法去閉合**了,但這時我們可以傳入$就可以達到getshell的目的。
現在,讓我們來修改一下**,讓我們不只能輸出phpinfo
<?php echo "$";?> //@是用來防止輸出錯誤資訊的
菜刀成功連線
本文簡單記錄了雙引號可能會引發的**執行的情況
對於這種漏洞的防禦,一定要明確單引號與雙引號的區別所在,不要簡單認為兩者是互相可以替代的,在平時的**書寫中能只用單引號一定不要用雙引號,畢竟單引號的解釋時間也比雙引號少得多,**執行相對更快。
PHP中單引號和雙引號的區別
php把單引號中的資料視為普通字串,不再處理。而雙引號還要對其中的字串進行處理,比如遇到 了會把其後的內容視為變數。即 單引號裡面的 變數名 不被替換。雙引號裡面的 變數名 會被替換。例如 name hello echo the name 會輸出 the hello 而如果是單引號 name hel...
PHP中單引號和雙引號的區別
關於單引號和雙引號的區別和效率問題。很多朋友了解的不是很清楚,一直以為php中單引號和雙引號是互通的,直到有一天,發現單引號和雙引號出現錯誤的時候才去學習研究。所以今天再拿出來談談他們的區別,希望大家不要再為此困惑。雙引號裡面的字段會經過編譯器解釋,然後再當作html 輸出。單引號裡面的不進行解釋,...
PHP中單引號和雙引號的區別
php中的單引號和雙引號在很多時候都是互通的,但是也存在區別 其中的內容不會經過解釋 n不會輸出為換行,而是直接輸出 即內容會與輸入的內容一致,例如 a 123 echo a is a 其輸出內容為 a is a雙引號中的內容將會被解釋,即解析內容中的變數,例如 a 123 echo a is a ...