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