很多人可能不認(rèn)為自己的網(wǎng)站不值得被黑客入侵,但是網(wǎng)站一直都在受到入侵。大多數(shù)網(wǎng)站安全漏洞不是竊取您的數(shù)據(jù),而是嘗試將您的岑鞏服務(wù)器用作垃圾郵件的電子郵件中繼?;蛟O(shè)置一個臨時Web岑鞏服務(wù)器,或者當(dāng)作一個掛馬站,在岑鞏服務(wù)器中所有網(wǎng)站掛上一些鏈接,通常用于提供非法文件。濫用受感染機(jī)器的其他非常常見的方法包括將您的服務(wù)器用作僵尸網(wǎng)絡(luò)的一部分,或挖掘比特幣。您甚至可能受到勒索軟件的攻擊。
黑客通常通過編寫自動腳本來執(zhí)行沖刷任務(wù),以搜尋互聯(lián)網(wǎng),以利用軟件中已知的網(wǎng)站安全問題。以下是我們幫助您和網(wǎng)站服務(wù)器安全的9大技巧。
01.使軟件保持最新
看起來似乎很明顯,但是確保所有軟件都保持最新對確保站點(diǎn)安全至關(guān)重要。這適用于服務(wù)器操作系統(tǒng)以及您可能在網(wǎng)站上運(yùn)行的任何軟件(例如CMS或論壇)。當(dāng)在軟件中發(fā)現(xiàn)網(wǎng)站安全漏洞時,黑客會迅速嘗試濫用它們。
如果您使用的是托管托管解決方案,那么您不必?fù)?dān)心為操作系統(tǒng)應(yīng)用安全更新,因?yàn)橥泄芄緫?yīng)該注意這一點(diǎn)。
如果您在網(wǎng)站上使用第三方軟件(例如CMS或論壇),則應(yīng)確保快速應(yīng)用所有安全補(bǔ)丁程序。大多數(shù)供應(yīng)商都有詳細(xì)列出任何網(wǎng)站安全問題的郵件列表或RSS feed。WordPress,Umbraco和許多其他CMS在您登錄時通知您可用的系統(tǒng)更新。
許多開發(fā)人員使用諸如Composer,npm或RubyGems之類的工具來管理其軟件依賴性,出現(xiàn)在您所依賴但未引起關(guān)注的軟件包中的安全漏洞是最容易被發(fā)現(xiàn)的方法之一。確保您的依賴關(guān)系保持最新狀態(tài),并使用Gemnasium之類的工具在某個組件中宣布一個漏洞時自動獲得通知。
02.注意SQL注入
SQL注入攻擊是指攻擊者使用Web表單字段或URL參數(shù)來訪問或操縱您的數(shù)據(jù)庫時。當(dāng)您使用標(biāo)準(zhǔn)的Transact SQL時,很容易在不知不覺中將惡意代碼插入查詢中,這些代碼可用于更改表,獲取信息和刪除數(shù)據(jù)。您可以通過始終使用參數(shù)化查詢來輕松地避免這種情況,大多數(shù)Web語言都具有此功能,并且易于實(shí)現(xiàn)。
考慮以下查詢:
"SELECT * FROM table WHERE column = '" + parameter + "';"
如果攻擊者將URL參數(shù)更改為傳遞'或'1'='1,這將導(dǎo)致查詢?nèi)缦滤荆?br/>"SELECT * FROM table WHERE column = '' OR '1'='1';"
由于“ 1”等于“ 1”,這將使攻擊者可以在SQL語句的末尾添加一個附加查詢,該查詢也將被執(zhí)行。
您可以通過顯式參數(shù)化此查詢來解決此查詢。例如,如果您在PHP中使用MySQLi,則應(yīng)為:
$stmt = $pdo->prepare('SELECT * FROM table WHERE column = :value'); $stmt->execute(array('value' => $parameter)); 03.防御XSS攻擊
03.跨站點(diǎn)腳本
(XSS)攻擊將惡意JavaScript注入您的頁面,然后在用戶的瀏覽器中運(yùn)行該JavaScript,并且可以更改頁面內(nèi)容或竊取信息以發(fā)送回攻擊者。例如,如果您在未經(jīng)驗(yàn)證的頁面上顯示評論,則攻擊者可能會提交包含腳本標(biāo)簽和JavaScript的評論,這些腳本標(biāo)簽和JavaScript可以在每個其他用戶的瀏覽器中運(yùn)行并竊取其登錄Cookie,從而使攻擊者可以控制每個用戶的帳戶查看評論的用戶。您需要確保用戶不能將活動的JavaScript內(nèi)容注入您的頁面。
這是現(xiàn)代Web應(yīng)用程序中特別需要關(guān)注的問題,在這些應(yīng)用程序中,頁面現(xiàn)在主要由用戶內(nèi)容構(gòu)建,并且在許多情況下會生成HTML,然后這些HTML也會由前端框架(如Angular和Ember)進(jìn)行解釋。這些框架提供了許多XSS保護(hù),但是混合服務(wù)器和客戶端呈現(xiàn)也會創(chuàng)建新的和更復(fù)雜的攻擊途徑:不僅將JavaScript注入HTML有效,而且還可以注入將通過插入Angular指令或使用Ember運(yùn)行代碼的內(nèi)容。幫手。
這里的關(guān)鍵是著眼于用戶生成的內(nèi)容如何能夠逃脫您期望的范圍,并被瀏覽器解釋為您想要的其他內(nèi)容。這類似于防御SQL注入。動態(tài)生成HTML時,請使用明確進(jìn)行所需更改的函數(shù)(例如,使用element.setAttribute和element.textContent,它們將被瀏覽器自動轉(zhuǎn)義,而不是手動設(shè)置element.innerHTML),或使用函數(shù)在您的模板工具中會自動進(jìn)行適當(dāng)?shù)霓D(zhuǎn)義,而不是串聯(lián)字符串或設(shè)置原始HTML內(nèi)容。
XSS防御者工具箱中的另一個強(qiáng)大工具是內(nèi)容安全策略(CSP)。CSP是服務(wù)器可以返回的標(biāo)頭,它告訴瀏覽器限制頁面中JavaScript的執(zhí)行方式和執(zhí)行方式,例如,禁止運(yùn)行未在您的域中托管的任何腳本,禁止內(nèi)聯(lián)JavaScript或禁用eval()。Mozilla提供了一些示例配置的出色指南。即使攻擊者的腳本可以將其帶入您的頁面,這也使其工作起來更加困難。
04.當(dāng)心錯誤信息
請注意在錯誤消息中提供的信息量。僅向您的用戶提供最少的錯誤,以確保他們不會泄漏您服務(wù)器上存在的機(jī)密(例如,API密鑰或數(shù)據(jù)庫密碼)。也不要提供完整的異常詳細(xì)信息,因?yàn)樗鼈儠箯?fù)雜的攻擊(如SQL注入)變得更加容易。在您的服務(wù)器日志中保留詳細(xì)的錯誤,并僅向用戶顯示他們需要的信息。
05.雙方驗(yàn)證
驗(yàn)證應(yīng)始終在瀏覽器和服務(wù)器端進(jìn)行。瀏覽器可以捕獲簡單的故障,例如必填字段為空以及在僅數(shù)字字段中輸入文本時。但是,可以繞過這些操作,并且您應(yīng)確保檢查這些驗(yàn)證和更深層的驗(yàn)證服務(wù)器端,否則可能導(dǎo)致惡意代碼或腳本代碼插入數(shù)據(jù)庫中或在您的網(wǎng)站中導(dǎo)致不良結(jié)果。
06.檢查您的密碼
每個人都知道他們應(yīng)該使用復(fù)雜的密碼,但這并不意味著他們總是這樣做。在服務(wù)器和網(wǎng)站管理區(qū)域中使用強(qiáng)密碼至關(guān)重要,但同樣重要的是,堅(jiān)持為用戶提供良好的密碼習(xí)慣,以保護(hù)其帳戶的安全。
盡管用戶可能不喜歡,但強(qiáng)制執(zhí)行密碼要求(例如,至少要包含八個字母左右的八個字符),這將有助于長期保護(hù)他們的信息。
密碼應(yīng)始終存儲為加密值,最好使用單向哈希算法(例如SHA)存儲。使用此方法意味著在對用戶進(jìn)行身份驗(yàn)證時,您只能比較加密的值。為了提高網(wǎng)站的安全性,最好對密碼加鹽(每個密碼使用新的鹽)。
如果有人侵入并竊取您的密碼,則使用散列密碼可能會有助于限制損害,因?yàn)闊o法解密它們。某人可以做的最好的事情就是字典攻擊或蠻力攻擊,實(shí)質(zhì)上是猜測每種組合,直到找到匹配為止。當(dāng)使用加鹽密碼時,破解大量密碼的過程甚至更慢,因?yàn)槊總€鹽和密碼的每個猜測都必須分別進(jìn)行哈希處理,這在計(jì)算上非常昂貴。
值得慶幸的是,盡管使用咸密碼(Drupal 7之前的版本)或設(shè)置最低密碼強(qiáng)度可能需要一些配置或額外的模塊,但許多CMS還是為用戶管理提供了許多內(nèi)置的內(nèi)置網(wǎng)站安全功能。如果您使用的是.NET,則值得使用成員資格提供程序,因?yàn)樗鼈兎浅R子谂渲?,提供?nèi)置的網(wǎng)站安全性并包括用于登錄和密碼重置的現(xiàn)成控件。
07.避免文件上傳
即使只是更改他們的頭像,允許用戶將文件上傳到您的網(wǎng)站也可能帶來很大的網(wǎng)站安全風(fēng)險(xiǎn)。風(fēng)險(xiǎn)是,任何上傳的文件,無論看上去多么單純,都可能包含一個腳本,該腳本在您的服務(wù)器上執(zhí)行時會完全打開您的網(wǎng)站。
如果您有文件上傳表單,則需要非常懷疑所有文件。如果允許用戶上載圖像,則不能依靠文件擴(kuò)展名或mime類型來驗(yàn)證文件是否為圖像,因?yàn)檫@些很容易被偽造。即使打開文件并讀取標(biāo)題,或使用功能檢查圖像大小也不是萬無一失的。大多數(shù)圖像格式都允許存儲一個注釋部分,其中可能包含服務(wù)器可以執(zhí)行的PHP代碼。
那么,您可以采取什么措施來防止這種情況發(fā)生呢?最終,您希望阻止用戶執(zhí)行他們上傳的任何文件。默認(rèn)情況下,Web服務(wù)器不會嘗試執(zhí)行帶有圖像擴(kuò)展名的文件,但不會僅依賴于檢查文件擴(kuò)展名,因?yàn)橐阎Q為image.jpg.php的文件可以通過。
一些選項(xiàng)是在上傳時重命名文件以確保正確的文件擴(kuò)展名,或更改文件許可權(quán),例如chmod 0666使其無法執(zhí)行。如果使用* nix,則可以創(chuàng)建一個.htaccess文件(請參見下文),該文件將僅允許訪問設(shè)置的文件以防止前面提到的雙擴(kuò)展名攻擊。
deny from all <Files ~ "^\w+\.(gif|jpe?g|png)$"> order deny,allow allow from all </Files>
最終,推薦的解決方案是完全禁止直接訪問上傳的文件。這樣,任何上傳到您網(wǎng)站的文件都將存儲在webroot之外的文件夾中或數(shù)據(jù)庫中。如果無法直接訪問文件,則需要創(chuàng)建一個腳本以從專用文件夾(或.NET中的HTTP處理程序)中獲取文件,并將其傳遞到瀏覽器。圖像標(biāo)簽支持不是圖像的直接URL的src屬性,因此,如果您在HTTP標(biāo)頭中設(shè)置了正確的內(nèi)容類型,則src屬性可以指向文件傳遞腳本。例如:
<img src="/imageDelivery.php?id=1234" /> <?php // imageDelivery.php // Fetch image filename from database based on $_GET["id"] ... // Deliver image to browser Header('Content-Type: image/gif'); readfile('images/'.$fileName); ?>
大多數(shù)托管服務(wù)提供商會為您處理服務(wù)器配置,但是如果您將網(wǎng)站托管在自己的服務(wù)器上,那么您將需要檢查的內(nèi)容很少。
確保您具有防火墻設(shè)置,并阻止所有非必需端口。如果可能,請?jiān)O(shè)置DMZ(非軍事區(qū)),僅允許外界訪問端口80和443。盡管如果無法從內(nèi)部網(wǎng)絡(luò)訪問服務(wù)器,則可能無法實(shí)現(xiàn),因?yàn)槟鷮⑿枰蜷_端口以允許上傳文件并通過SSH或RDP遠(yuǎn)程登錄到服務(wù)器。
如果您允許從Internet上傳文件,請僅使用安全的傳輸方法將文件傳輸?shù)椒?wù)器,例如SFTP或SSH。
如果可能,數(shù)據(jù)庫要在與Web服務(wù)器不同的服務(wù)器上運(yùn)行。這樣做意味著無法直接從外部訪問數(shù)據(jù)庫服務(wù)器,只有您的Web服務(wù)器可以訪問它,從而最大程度地減少了暴露數(shù)據(jù)的風(fēng)險(xiǎn)。
最后,不要忘記限制對服務(wù)器的物理訪問。
08.使用HTTPS
HTTPS是用于通過Internet提供安全性的協(xié)議。HTTPS保證用戶正在與他們期望的服務(wù)器進(jìn)行通信,并且其他任何人都不能截取或更改他們在傳輸中看到的內(nèi)容。
如果您有用戶想要私有的任何內(nèi)容,強(qiáng)烈建議僅使用HTTPS進(jìn)行交付。當(dāng)然,這意味著信用卡和登錄頁面(以及它們提交的URL),但是通常您的網(wǎng)站也會更多。例如,登錄表單通常會設(shè)置一個cookie,該cookie與其他所有請求一起發(fā)送到登錄用戶發(fā)出的您的站點(diǎn),并用于對這些請求進(jìn)行身份驗(yàn)證。竊取此信息的攻擊者將能夠完美地模仿用戶并接管其登錄會話。為了克服這種攻擊,您幾乎總是希望對整個站點(diǎn)使用HTTPS。
這不再像以前那樣棘手或昂貴。讓我們加密提供完全免費(fèi)和自動化的證書,您需要啟用HTTPS,并且現(xiàn)有的社區(qū)工具可用于各種常見平臺和框架,以自動為您設(shè)置此證書。
值得注意的是,Google已宣布,如果您使用HTTPS,它們將在搜索排名中提升您的位置,這也為SEO帶來了好處。不安全的HTTP即將淘汰,現(xiàn)在是升級的時候了。
已經(jīng)在各處使用HTTPS了嗎?進(jìn)一步講一下,設(shè)置HTTP Strict Transport Security(HSTS),這是一個簡單的標(biāo)頭,您可以將其添加到服務(wù)器響應(yīng)中,以禁止整個域使用不安全的HTTP。
09.獲取網(wǎng)站安全工具
一旦您認(rèn)為自己已經(jīng)做好了一切,就可以測試網(wǎng)站的安全了。最有效的方法是使用某些網(wǎng)站安全工具,通常稱為滲透測試或簡稱為筆測試。
有許多商業(yè)和免費(fèi)產(chǎn)品可以幫助您。他們以與腳本黑客類似的方式工作,他們測試所有已知漏洞,并嘗試使用前面提到的某些方法(例如SQL Injection)來危害您的站點(diǎn)。
一些值得關(guān)注的免費(fèi)工具:
Netsparker(提供免費(fèi)的社區(qū)版和試用版)。非常適合測試SQL注入和XSS OpenVAS聲稱是最先進(jìn)的開源安全掃描程序。非常適合測試已知漏洞,目前可掃描25,000多個。但是這可能很難設(shè)置,并且需要安裝僅在* nix上運(yùn)行的OpenVAS服務(wù)器。在成為開源商業(yè)產(chǎn)品之前,OpenVAS是Nessus的分支 。 SecurityHeaders.io(免費(fèi)在線檢查)??焖賵?bào)告域中已啟用并正確配置了上述哪些安全標(biāo)頭(例如CSP和HSTS)的工具。 Xenotix XSS Exploit Framework是OWASP(開放式Web應(yīng)用程序安全項(xiàng)目)中的工具,其中包含大量的XSS攻擊示例,您可以運(yùn)行這些示例來快速確認(rèn)您站點(diǎn)的輸入在Chrome,F(xiàn)irefox和IE中是否容易受到攻擊。
自動測試的結(jié)果可能令人生畏,因?yàn)樗鼈儠砗芏酀撛诘膯栴}。重要的是首先關(guān)注關(guān)鍵問題。通常,所報(bào)告的每個問題都帶有對潛在漏洞的良好解釋。您可能會發(fā)現(xiàn)某些中/低級問題與您的網(wǎng)站無關(guān)。
您可以采取其他一些步驟,通過更改POST / GET值來手動嘗試破壞您的站點(diǎn)。調(diào)試代理可以在這里為您提供幫助,因?yàn)樗试S您在瀏覽器和服務(wù)器之間攔截HTTP請求的值。一個流行的名為Fiddler的免費(fèi)軟件應(yīng)用程序是一個很好的起點(diǎn)。
那么,您應(yīng)該如何嘗試更改請求?如果您的頁面僅對已登錄用戶可見,請嘗試更改URL參數(shù)(例如用戶ID或cookie值),以嘗試查看其他用戶的詳細(xì)信息。另一個值得測試的領(lǐng)域是表單,可以更改POST值以嘗試提交代碼以執(zhí)行XSS或上載服務(wù)器端腳本。
以上文章來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系創(chuàng)一網(wǎng)的客服處理。謝謝!