我正在建立一个用于过滤数据的类,并且一直在编译各种建议。

这主要是为了避免来自数据库中用户输入的错误数据,并且还可以提供一个附加级别,以帮助防止尚未想到的注入攻击类型等。(注意:这并不能代替将准备好的语句也与任何数据一起使用的需求。提交到数据库。)

尽可能,我不想返回错误,我想“使数据正常工作”。假设有人不小心输入了;或'等。在无法接受的输入字段中。或以不应该使用的数字形式留在千位分隔符(,)中。因此,只需将其取出并继续。

我想把它放在那里供其他人批评和使用。我知道关于这种类型的东西还有其他问题,但是我还没有看到针对各种类型的综合建议。

我的问题是-您会怎么做?您会担心用户输入的数字是“ 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的上述评论(由于我的代表,我无法发表评论)。无法知道用户的意图,因此“使它起作用”最终可能会使他们感到更糟。如果他们输入“;”那么很可能他们也会出错。

防止不必要的字符输入应尽可能通过接口处理,而后端代码应仅测试一致性。如果失败,则返回错误代码,并让前端对其进行处理。

从数字中删除逗号或修剪空格可能还不错,但这也是我尽可能尝试的方法。您只需要根据需要进行处理。

关于php - PHP用户输入数据过滤以提交到MySQL数据库-建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54465197/

10-13 08:07
查看更多