摘要:原文來自本文只是個人從實際開發經驗中總結的一些東西,并不是什么名言警句,寫出來有兩個目的一是時刻提醒自己要按照這些知識點來寫自己代碼,二是為了分享,說不定對你有用呢萬一,是吧。。。
</>復制代碼
原文來自:https://jellybool.com/post/9-things-that-php-developer-should-know-abo...
本文只是個人從實際開發經驗中總結的一些東西,并不是什么名言警句,寫出來有兩個目的:一是時刻提醒自己要按照這些知識點來寫自己代碼,二是為了分享,說不定對你有用呢?萬一,是吧。。。
1.首要意識:安全大多數時候,我們開發的Web程序都是需要跟數據庫打交道的,所以這里幾乎可以說SQL注入是一個怎么也無法避免要拿出來討論一下的問題。而且近年來像XSS和CSRF攻擊也變得大行其道,使得"黑客"們貌似又有了一把把利器,而我們總是處于被動的狀態。不過我們要記得是下面這兩個原則:
</>復制代碼
1. 永遠不要相信用戶輸入的東西。(老話了,但這是真的)
2. 將自己需要輸出的數據進行轉義。
簡單來說就是:filter input , escape output
如果你是新手,不要再使用類似以下的查詢語句了:
</>復制代碼
SELECT FROM users WHERE username = $_POST["username"] AND password = $_POST["password"];
還有就是,使用PDO或Mysqli吧,不要再使用老式的mysql操作了。
而對于,CSRF的解決方案,目前接觸的都是給每一次的表單提交都設置一個token值,然后在表單提交的時候校驗之即可。
2.明確地知道各個比較操作符的差別PHP的比較操作符,這其實可以說是一個很小的注意點,但是在某些時候真的很重要。比如說很多時候我們得考慮清楚,該用==還是===,如果你使用過strpos()這個函數,下面的代碼可能會給你一個直觀的感受:
</>復制代碼
上面這段代碼的運行結果其實是輸出Chris is not an author,但是現實情況是,Chris & Sean真的是Author啊,怎么回這樣呢?其實是這樣的:Chris正好出現在Chris & Sean首位開始處,也就是0這個位置,所以substr()返回了,由于條件判斷語句中bool判斷,所以0作為了false處理,于是程序輸出了Chris is not an author,但是在這種情況之下我們該怎么處理呢?我們其實可以這樣的:
</>復制代碼
這里的!==和!=的不同就體現出來了。
3.可以減少使用else就少使用else
這個貌似從我一開始接觸編程就有的一個想法,因為每次看到if(){}else{}就有一種這一段其實可以寫得更好的感覺,因為一旦你減少了使用else關鍵字,你得代碼會減少兩行!沒錯,兩行也是我們的追求,而且,從我的經驗看,else少的代碼貌似可讀性更高,對我來說。
</>復制代碼
if( this condition )
{
$x = 5;
}
else
{
$x = 10;
如果,在$x的默認值是10,還是下面這樣寫感覺比較好:
</>復制代碼
$x = 10;
if( this condition )
{
$x = 5;
}
4.去掉不必要的括號
</>復制代碼
注:貌似這一點是一個不太好的習慣。很多人在評論里面指出了,我面壁一下
這里的目的其實跟else關鍵字部分是一樣的,我們是為了更簡短的代碼和更優越的可讀性,對以下的情況,你都應該考慮優化代碼:
</>復制代碼
if ($gollum == "halfling") {
$height --;
}
其實是可以這樣的:
</>復制代碼
if ($gollum == "halfling") $height --;
你甚至可以這樣:
</>復制代碼
if ($gollum == "halfling") $height --;
else $height ++;
if ($frodo != "dead")
echo "Gosh darnit, roll again Sauron";
foreach ($kill as $count)
echo "Legolas strikes again, that makes" . $count . "for me!";
是不是有一種又短又清晰的感覺?
5.多用str_replace()
在很多時候我們需要對一些字符串進行替換,在PHP中有以下幾個函數可以達到這個目的:
</>復制代碼
str_replace()
ereg_replace()
preg_replace()
如果你確實是需要使用正則匹配,那就使用preg_replace(),而如果在可實現替換的情況下,請使用str_replace(),因為據不完全統計,str_replace()的效率在這三個當中是最高的。
6.使用三元運算符
這個可能很多人都有這個感受,使用三元運算符之后,我們可以去掉一堆if else語句了,代碼又短又爽。
</>復制代碼
$host = strlen($host) > 0 ? $host : htmlentities($host);
7.使用緩存
目前PHP熱門的緩存技術可能就是Redis和Memcached了,在PHP的官方文檔中,也有Memcached的使用教程,至于Redis,我最近在研究中,后續會給出一些教程,如果一切順利的話。
8.使用框架
框架的好處很多,可能是在性能方面有所損失外,貌似找不到不用框架的理由了,框架即可以加快你的開發速度,也可以讓你在寫代碼的過程中擼的舒舒服服,而且想很多安全問題,你都會得到很好的解決。我這里首推Laravel,不過像Yii2 Slim Symfony都是非常棒的框架,除了Symfony沒有嘗過過之外,剩下的三個我都有使用經歷,最后就基本是用Laravel了。不過我建議的Laravel可能不適合你,這還是得看個人喜好。
9.用isset()代替strlen()
如果你需要在項目代碼中需要根據一個字符串的長度來做條件判斷,這個時候非常推薦你直接使用isset(),因為在同等條件之后,isset()的速度是strlen()的五倍左右,所以:
</>復制代碼
= 6) {
// The username is at least six characters long.
}
以上的兩個條件判斷都是可以達到相同的目的,但是我推薦使用的是第一種。
Happy Hacking
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21036.html
摘要:本文只是個人從實際開發經驗中總結的一些東西,并不是什么名言警句,寫出來有兩個目的一是時刻提醒自己要按照這些知識點來寫自己代碼,二是為了分享,說不定對你有用呢萬一,是吧。。。 本文只是個人從實際開發經驗中總結的一些東西,并不是什么名言警句,寫出來有兩個目的:一是時刻提醒自己要按照這些知識點來寫自己代碼,二是為了分享,說不定對你有用呢?萬一,是吧。。。1.首要意識:安全 大多數時候,我們開...
摘要:的元數據隱藏功能會更改集群部署機制以避免此暴露,我們建議使用它直到有永久解決方案。授權失敗可能意味著攻擊者試圖濫用被盜的憑據。年中國論壇提案征集現已開放論壇讓用戶開發人員從業人員匯聚一堂,面對面進行交流合作。 作者:StackRox產品經理Connor Gilbert 上個月,Kubernetes(世界上最受歡迎的容器編排器)生態系統因發現Kubernetes的第一個主要安全漏洞而動搖...
摘要:的元數據隱藏功能會更改集群部署機制以避免此暴露,我們建議使用它直到有永久解決方案。授權失敗可能意味著攻擊者試圖濫用被盜的憑據。年中國論壇提案征集現已開放論壇讓用戶開發人員從業人員匯聚一堂,面對面進行交流合作。 作者:StackRox產品經理Connor Gilbert 上個月,Kubernetes(世界上最受歡迎的容器編排器)生態系統因發現Kubernetes的第一個主要安全漏洞而動搖...
摘要:的元數據隱藏功能會更改集群部署機制以避免此暴露,我們建議使用它直到有永久解決方案。授權失敗可能意味著攻擊者試圖濫用被盜的憑據。年中國論壇提案征集現已開放論壇讓用戶開發人員從業人員匯聚一堂,面對面進行交流合作。 作者:StackRox產品經理Connor Gilbert 上個月,Kubernetes(世界上最受歡迎的容器編排器)生態系統因發現Kubernetes的第一個主要安全漏洞而動搖...
摘要:第四章安全管理制度發布第十條安全管理制度必須以正式文件的形式發布施行。第十一條安全管理制度由信息安全管理小組制訂,信息安全領導小組審批發布。第二十條安全管理制度的修改與廢止須經信息安全領導組織審批確認,信息安全管理部門備案。 字數 3610閱讀 760評論 0贊 3《xxxx安全管理制度匯編》****制度管理辦法****文...
閱讀 3739·2021-11-22 13:52
閱讀 3620·2019-12-27 12:20
閱讀 2394·2019-08-30 15:55
閱讀 2148·2019-08-30 15:44
閱讀 2266·2019-08-30 13:16
閱讀 582·2019-08-28 18:19
閱讀 1890·2019-08-26 11:58
閱讀 3444·2019-08-26 11:47