你的PHP/Laravel網站是否足夠安全?
1. SQL 注入
或許這是最知名的漏洞. 從根本上來說, 他允許網站攻擊者注入 SQL 到你的代碼中. 如果你的代碼就想這樣:
- $post_id = $_POST['post_id'];
- $sql = "DELETE FROM posts WHERE user_id = 1 AND id = $post_id";
- \DB::statement($sql);
如果有人在 email 字段輸入: 1 OR 1. SQL 語句將像以下這樣:
- $sql = "DELETE FROM posts WHERE user_id = 1 AND id = 1 OR 1";
基本上你在說的是 --- 請刪除所有用戶的所有帖子.
2. XSS (cross site scripting)
跨站腳本攻擊類似于SQL注入.它會向HTML頁面注入HTML/JavaScript代碼.
想象一個類似于Google的,用戶可以輸入并進行搜索的頁面,在搜索結果顯示頁面,如果你用如下的方式顯示用戶搜索的結果:
- <?php echo 'You searched for: ' . $_GET['search_query']; ?>
如果攻擊者嘗試輸入類似如下的代碼:
- <script>alert('surprise!');</script>
瀏覽器將會執行這句JavaScript 腳本,用戶將會看到一個顯示著"surprise!"的彈窗.
攻擊者利用這個漏洞,可以竊取瀏覽器的cookie,強制用戶跳轉到其他網站,竊取用戶的密碼.什么?你的密碼是123456?
3. CSRF (跨站請求偽造)
例如在你的網站上有用戶可以用來刪除賬戶的鏈接.
- <a href="http://your-website.com/delete-account">delete account</a>
猜測以下如果攻擊者提交一個如下這樣的評論會發生什么:
- <img src=”http://your-website.com/delete-account”> lol :D
用戶將在查看此評論的時候刪除他們的賬號. 讓我們繼續發表評論.
4. 點擊劫持
這種攻擊類型試圖讓你點擊你不想要的地方。例如通過在其他按鈕頂部放置不可見的 Facebook like 按鈕。
另一個例子是在 <iframe> 中打開 Facebook ,并將這個 iframe 放置在 JavaScript 代碼中,所以無論何時你點擊某個地方,你總是會點擊到 Facebook 頁面上的分享按鈕。
查看示例
你也喜歡這個例子嗎?
5. 上傳文件到 public_html
這種攻擊形式是,攻擊者上傳 .php 文件或者其他可執行文件到你的 public_html 目錄。.
想象一下如果你的網站有圖片上傳功能,同時沒有檢測上傳文件的類型。我仿佛看見一場上傳風暴撲面而來...
6. ZIP 炸彈
一些網站允許用戶上傳 .zip 文檔,然后進行解壓縮和再處理。但這里存在一個大問題。
很有可能這個 .zip 文檔大小僅有 42 KB,但在解壓后會占用 4718592 GB 的空間。你可以把它想象成一顆原子彈。
樣例文件
7. file_get_contents()
使用這個函數可以輕松的讀取文件內容:
- echo file_get_contents('https://some-website.com/friend-list.txt');
但是你如果讓攻擊者輸入他想要的,他可以從你服務器進入的文件,例如:
- echo file_get_contents('.env');
OR
- echo file_get_contents('secret-code.php');
這個函數將會從你的服務器讀取文件和展示內容給攻擊者。
這個漏洞是很難找到的,就像皮卡丘在寵物小精靈之中一樣難找。
總結
想要在這場漏洞之戰中贏得勝利,最好的方法就是深入了解它們。