PHP输入验证的正确顺序

时间:2013-02-13 03:47:50

标签: php regex validation

显然,您应该在服务器端验证所有用户输入数据。我只是好奇什么被认为是“正确的”输入验证以及它应该完成的顺序。

截至目前(以及最近的项目)我已经这样做了:

获取用户输入,实例化对象,然后调用方法:

if(isset($_POST['addCat'])) {
    $db = new DBConnection;
    $categories = new Category($db);

    if($categories->insert_cat($_POST['name']) === TRUE) {
        echo "Category Inserted Successfully!";
    }
}

从实例化对象调用的方法:
1。逃避用户输入
2。 istantiates data_validation对象(参见下面的验证对象)

class Categories {
    public function insert_cat($catName) {
        $catName = $this->mysqli->real_escape_string($catName);
        $validate = new data_validation;

        if(!($validate->validate_string($catName))) {
            echo "Invalid characters found in category name";
            die();
        }

        $query = $this->mysqli->query("INSERT INTO categories(name) VALUES ('".$catName."')");

        if($query === false) {
            printf("Error: %s\n", $this->mysqli->error);
            die();
        } else {
            return true;
        }
    }
}

data_validation类:1。修剪数据
2。将数据与正则表达式匹配
3。将数据返回到insert_cat方法以进行数据库插入

class data_validation {
    public function validate_string($data) {
        // Remove excess whitespace
        $data = trim($data);

        if ( preg_match("/^[0-9A-Za-z \.\-\'\"]+$/", $data) ) {
            return true;
        } else {
            //return 'Not a valid string';
            return false;
        }
    }
}

所以基本上简而言之我的问题是:首先逃避数据,然后修剪它,然后将它与正则表达式进行比较,然后添加htmlentites()或其他类似的东西以保留任何格式或应该是正确的它以不同的顺序完成?

任何提高我安全习惯的提示都非常受欢迎!

1 个答案:

答案 0 :(得分:0)

The Open Web Application Security Project上,您可以找到大部分(如果不是全部)有关验证和安全性的信息。