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