2

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

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

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

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

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

从实例化对象调用的方法:
1. 转义用户输入
2. 实例化 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()或类似的东西以保留任何格式,还是应该以不同的顺序完成?

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

4

1 回答 1

0

The Open Web Application Security Project中,您将找到大部分(如果不是全部)您需要的关于验证和一般安全性的信息。

于 2013-02-13T03:57:46.737 回答