簡體   English   中英

PHP用戶輸入數據過濾以提交到MySQL數據庫-建議

[英]PHP user input data filtering for submission to MySQL database - recommendations

我正在建立一個用於過濾數據的類,並且一直在編譯各種建議。

這主要是為了避免來自數據庫中用戶輸入的錯誤數據,並且還可以提供一個附加級別,以幫助防止尚未想到的注入攻擊類型等。 (注意:這並不能代替將准備好的語句也與任何數據一起使用的需求。提交到數據庫。)

盡可能,我不想返回錯誤,我想“使數據正常工作”。 假設有人不小心輸入了; 或'等。在無法接受的輸入字段中。 或以不應該使用的數字形式留在千位分隔符(,)中。 因此,只需將其取出並繼續。

我想把它放在那里供其他人批評和使用。 我知道關於這種類型的事情還有其他問題,但是我還沒有看到針對各種類型的組合建議的任何問題。

我的問題是-您會怎么做? 您是否會擔心用戶輸入的數字為“ 47387.284.02”? 如果是這樣,我如何消除第二個點(小數點,句點)以及之后的所有內容? (盡管仍允許使用“ .75”和“ 10.20”之類的數字)

// Use for numbers - integers, floats
function filterNumbers($data) {
    $data = trim(htmlentities(strip_tags($data)));
    $data = preg_replace('/[^.0-9]/', "", $data); // only numeric values allowed (and decimal point)
    $data = filter_var($data, FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
    $data = mysqli_real_escape_string($GLOBALS['con2'], $data);
    return $data;
}

// Use for short strings - alphanumeric only - usernames, varieties, etc.
function filterExtreme($data) {
    $data = trim(htmlentities(strip_tags($data)));
    $data = preg_replace('/[^ ._A-Za-z0-9]/', "", $data);
    $data = mysqli_real_escape_string($GLOBALS['con'], $data);
    return $data;
}

// Use for email addresses
function filterEmail($data) {
    $data = filter_var($data, FILTER_SANITIZE_EMAIL);
    $data = mysqli_real_escape_string($GLOBALS['con'], $data);
    return $data;
}

// Use for comments where some special characters may be desired
function filterComment($data) {
    $data = trim(htmlentities(strip_tags($data)));
    $data = filter_var($data, FILTER_SANITIZE_STRING,FILTER_FLAG_ENCODE_HIGH);
    $data = mysqli_real_escape_string($GLOBALS['con'], $data);
    return $data;
}

注意:$ con是與MySQL數據庫的連接詳細信息。

您正確的數據輸入是正確的,但是我同意Bill Karwin的上述評論(由於我的代表,我無法發表評論)。 無法知道用戶的意圖,因此“使它起作用”最終可能會使他們感到更糟。 如果他們輸入“;” 那么很可能他們也會出錯。

防止不必要的字符輸入應盡可能通過接口處理,而后端代碼應僅測試一致性。 如果失敗,則返回錯誤代碼,並讓前端對其進行處理。

從數字中刪除逗號或修剪空格可能還不錯,但這也是我盡可能嘗試的方法。 您只需要根據需要進行處理。

暫無
暫無

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

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