當前位置:才華齋>計算機>php語言>

六個常見PHP安全性攻擊

php語言 閱讀(1.42W)
  瞭解常見的PHP應用程式安全威脅,可以確保你的PHP應用程式不受攻擊。下面是小編整理了六個常見PHP安全性攻擊,歡迎閱讀!  1、SQL注入  SQL注入是一種惡意攻擊,使用者利用在表單欄位輸入SQL語句的方式來影響正常的SQL執行。還有一種是通過system()或exec()命令注入的,它具有相同的SQL注入機制,但只針對shell命令。  $username = $_POST['username'];  $query = "select * from auth where username = '".$username."'";echo $query;$db = new mysqli('localhost', 'demo', ‘demo', ‘demodemo');$result = $db->query($query);if ($result && $result->num_rows) {  &nbsp;&nbsp;&nbsp; echo "<br />Logged in successfully";} else {&nbsp;&nbsp;&nbsp; echo "<br />Login failed";}  上面的程式碼,在第一行沒有過濾或轉義使用者輸入的值($_POST['username'])。因此查詢可能會失敗,甚至會損壞資料庫,這要看$username是否包含變換你的SQL語句到別的東西上。  防止SQL注入  選項:  使用mysql_real_escape_string()過濾資料  手動檢查每一資料是否為正確的資料型別  使用預處理語句並繫結變數  使用準備好的預處理語句  分離資料和SQL邏輯  預處理語句將自動過濾(如:轉義)  把它作為一個編碼規範,可以幫助團隊裡的'新人避免遇到以上問題$query = 'select name, district from city where countrycode=?';if ($stmt = $db->prepare($query) ){  &nbsp;&nbsp;&nbsp; $countrycode = 'hk';  &nbsp;&nbsp;&nbsp; $stmt->bind_param("s", $countrycode);&nbsp;&nbsp;&nbsp; $stmt->execute();&nbsp;&nbsp;&nbsp; $stmt->bind_result($name, $district);&nbsp;&nbsp;&nbsp; while ( $stmt ($stmt->fetch() ){&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo $name.', '.$district;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo '<br />';&nbsp;&nbsp;&nbsp; }  &nbsp;&nbsp;&nbsp; $stmt->close();  }  2、XSS攻擊  XSS(跨站點指令碼攻擊)是一種攻擊,由使用者輸入一些資料到你的網站,其中包括客戶端指令碼(通常JavaScript)。如果你沒有過濾就輸出資料到另一個web頁面,這個指令碼將被執行。  接收使用者提交的文字內容  <?php  if (file_exists('comments')) {  &nbsp;&nbsp;&nbsp; $comments = get_saved_contents_from_file('comments');} else {&nbsp;&nbsp;&nbsp; $comments = '';  }  if (isset($_POST['comment'])) {  &nbsp;&nbsp;&nbsp; $comments .= '<br />' . $_POST['comment'];&nbsp;&nbsp;&nbsp; save_contents_to_file('comments', $comments);}  ?>  輸出內容給(另一個)使用者  <form action='' method='POST'>  Enter your comments here: <br />  <textarea name='comment'></textarea> <br />  <input type='submit' value='Post comment' />  </form><hr /><br />  <?php echo $comments; ?>  將會發生什麼事?  煩人的彈窗  重新整理或重定向  損壞網頁或表單  竊取cookie  AJAX(XMLHttpRequest)  防止XSS攻擊  為了防止XSS攻擊,使用PHP的htmlentities()函式過濾再輸出到瀏覽器。htmlentities()的基本用法很簡單,但也有許多高階的控制,請參閱 XSS速查表。  3、會話固定  會話安全,假設一個PHPSESSID很難猜測。然而,PHP可以接受一個會話ID通過一個Cookie或者URL。因此,欺騙一個受害者可以使用一個特定的(或其他的)會話ID 或者釣魚攻擊。  4、會議捕獲和劫持  這是與會話固定有著同樣的想法,然而,它涉及竊取會話ID。如果會話ID儲存在Cookie中,攻擊者可以通過XSS和JavaScript竊取。如果會話ID包含在URL上,也可以通過嗅探或者從代理服務器那獲得。  防止會話捕獲和劫持  更新ID  如果使用會話,請確保使用者使用SSL  5、跨站點請求偽造(CSRF)  CSRF攻擊,是指一個頁面發出的請求,看起來就像是網站的信任使用者,但不是故意的。它有許多的變體,比如下面的例子:  <img src='_click_to__id=123&item=12345'>  防止跨站點請求偽造  一般來說,確保使用者來自你的表單,並且匹配每一個你傳送出去的表單。有兩點一定要記住:  對使用者會話採用適當的安全措施,例如:給每一個會話更新id和使用者使用SSL。  生成另一個一次性的令牌並將其嵌入表單,儲存在會話中(一個會話變數),在提交時檢查它。  6、程式碼注入  程式碼注入是利用計算機漏洞通過處理無效資料造成的。問題出在,當你不小心執行任意程式碼,通常通過檔案包含。寫得很糟糕的程式碼可以允許一個遠端檔案包含並執行。如許多PHP函式,如require可以包含URL或檔名,例如:  <form>  Choose theme:  &nbsp;&nbsp;&nbsp; <select name = theme>  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <option value = blue>Blue</option>  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <option value = green>Green</option>  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <option value = red>Red</option>  &nbsp;&nbsp;&nbsp; </select>  &nbsp;&nbsp;&nbsp; <input type = submit>  </form>  <?php  &nbsp;&nbsp;&nbsp; if($theme) {  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; require($theme.'');&nbsp;&nbsp;&nbsp; }  ?>  在上面的例子中,通過傳遞使用者輸入的一個檔名或檔名的一部分,來包含以"http://"開頭的檔案。  防止程式碼注入  過濾使用者輸入  在中設定禁用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠端檔案。  其他的一般原則  1. 不要依賴伺服器配置來保護你的應用,特別是當你的web伺服器/ PHP是由你的ISP管理,或者當你的網站可能遷移/部署到別處,未來再從別處遷移/部署在到其他地方。請在網站程式碼中嵌入帶有安全意識的檢查/邏輯(HTML、JavaScript、PHP,等等)。  2. 設計伺服器端的安全指令碼:  —例如,使用單行執行 - 單點身份驗證和資料清理—例如,在所有的安全敏感頁面嵌入一個PHP函式/檔案,用來處理所有登入/安全性邏輯檢查3. 確保你的程式碼更新,並打上最新補丁。


六個常見PHP安全性攻擊