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