簡體   English   中英

用戶可以在 web 上更改什么? (例如 $_SESSION,JS 代碼)

[英]What can be changed by user on web? (eg. $_SESSION, JS code)

我想知道與Web 開發相關的用戶可以更改哪些內容不能更改。 主要是如果用戶可以更改 $_SESSION 中的變量 但是很高興知道某些看似安全的技術實際上是否不安全。 另一個例子是用戶更改 JS 類等中的代碼。

如果這個問題對某人來說太微不足道,我很抱歉。 學習 Web 開發 2 年,想學點新東西。

這是一個代碼示例,我不確定用戶是否可以更改他的 $_SESSION['group']

    public function login() {
          if(isset($_POST['login_submit'])) {
              if(isset($_POST['username']) and isset($_POST['password'])) {
                // Fetching user data
                  $stmt = $this->conn->prepare('SELECT Password FROM TB_Users WHERE Username = ?');
                  $stmt->execute([$_POST['username']]);
                  $user = $stmt->fetch();
                //-----------------------
                // Password Verification 
                  if(password_verify($_POST['password'], $user['Password'])) {
                //-----------------------
                // Fetching Group of user so it can be used later to fetch Permissions
                    $stmt = $this->conn->prepare('SELECT TB_userGroups_ID FROM TB_Users WHERE Username = ?');
                    $stmt->execute([$_POST['username']]);
                    $UserGroup = $stmt->fetch();
                    $_SESSION['group'] = $UserGroup['TB_userGroups_ID'];
                //-----------------------
                // Sending user back from Login page to Main/Index page
                    header("Location: ../index.php");
                    exit();
                //-----------------------
                  }
              }
          }

非常感謝任何幫助或重定向到來源。

如果user指的是網站的訪問者而不是開發人員(只是確保),那么他們不能單方面更改$_SESSION中的任何內容,因為這些值僅存在於服務器上。 用戶只有一個 cookie,服務器使用該 cookie 來識別$_SESSION變量的集合屬於他們。 開發人員負責確保控制進入$_SESSION的內容。 在您在這里的示例中,更改$_SESSION的唯一方法是基於從數據庫中檢索到的內容,因此假設內容是安全的,那么它就會受到保護。

我唯一的建議是擺脫你的isset($_POST['var'])東西並用filter_input()替換它。 您可以使用它從$_POST檢索值並對其進行清理。 調用時,您可以期待nullfalse內容缺失或無效,因此控制驗證與空值相比更容易一些。 樣本:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

完整的文檔在這里https://www.php.net/manual/en/function.filter-input.php

請務必熟悉過濾器標志。 例如, FILTER_SANITIZE_STRING不是一個很好的密碼。

其他一些需要考慮的事情:

  • 確保您的 session cookies 標記為 HTTPOnly 和 Secure,如果在 PHP7+ 上,也將 SameSite 標記設置為嚴格。 HTTPOnly 防止 javascript 能夠修改 cookie。 這些設置位於php.ini中。
  • 確保您的用戶受到 XSS 的保護,在這種情況下,有人可以通過注入您的站點(或者可能是完全外部的站點)的惡意代碼訪問他們的 session。 這些標頭可以在.htaccess或主機/虛擬主機配置文件中設置。
  • 確保您的密碼加密策略滿足基本要求,包括安全加密方法和鹽。 一般來說,您不必從數據庫中檢索密碼; 您應該能夠以一種方式對提供的密碼進行加鹽和加密,並更改您的查詢以簡單地計算匹配用戶名和加密密碼的行數。 這樣,數據庫中的安全密碼永遠不會存在於 web 服務器上(即使在內存中)。

暫無
暫無

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

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