显然,您应该在服务器端验证所有用户输入数据。我只是好奇什么是"正确的"输入验证,以及应该按照什么顺序进行。
截至目前(以及过去的最近项目),我是这样做的:
获取用户输入,实例化对象,并调用方法:
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()
或诸如此类的内容以保留任何格式,这合适吗?还是应该以不同的顺序进行?
任何改善我安全习惯的建议都非常受欢迎!
在开放式Web应用程序安全项目中,您可以找到有关验证和安全性的大部分信息。