簡體   English   中英

PHP安全的方式以表格形式放置URL,以防止受到xss /跨站點請求偽造CSRF攻擊

[英]PHP Safe way to put URL in form to protect against from xss / cross site request forgery CSRF attack

我在php中使用html表單,如下所示:

<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
.
.
</form>

但是,當我測試CSRF / XSS攻擊時,很容易插入此頁面。 有什么好的方法可以防止此類攻擊?

對於CSRF保護-

  • 使用csrf令牌,現在什么是csrf令牌,它不過是唯一的值,該值將由您的應用程序為每個表單提交事件生成,並附加到每個表單作為輸入隱藏值。 並且應用程序同時需要將該csrf令牌值設置為SESSION,以便在提交表單時可以檢查該令牌值是否有效。 這是保護CSRF攻擊的一種方法。

對於XSS保護-

  • 第一件事是設置前端和后端的表單驗證
  • 您可以使用不同的php過濾器方法
  • 使用htmlspecialchars()在檢索數據或顯示數據時將特殊字符轉換為HTML實體

防止CSRF的唯一安全方法是將秘密密鑰(csrf令牌)與每個請求關聯,然后在提交表單時對其進行檢查。 您可以將其放在隱藏的輸入中。

主要防御措施

選項1:使用預備語句(參數化查詢)

選項2:使用存儲過程

選項3:轉義所有用戶提供的輸入

其他防御措施

同時執行:最小權限

還執行:白名單輸入驗證

對於選項#3,請使用以下功能:

要使用mysqli_real_escape_str函數,您需要mysqli,才能在codeigniter中獲取它

function get_mysqli() { 
  $db = (array)get_instance()->db;
  return mysqli_connect('localhost', $db['username'], $db['password'],$db['database']);
}

public function filter($data)
    {
        $data = trim(htmlentities(strip_tags($data)));
        // print_r($data);
        if (get_magic_quotes_gpc()){
            // print_r($data);
            $data = stripslashes($data);
            // print_r($data);
            $data = mysqli_real_escape_string(get_mysqli(),$data);
            // print_r($data);
        }
        return $data;       
    }

將用戶輸入循環為:

foreach($_POST as $key => $value) {
    $array[$key] = $this->filter($value);
}

看一下這個:

https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM