PHP对于每一种类型都有特定的类型验证函数:
is_bool(), is_array(), is_numeric(), isfloat(), is_int(), is_null(), is_resource(), is_scalar(), is_string(), is_nan()
强制类型转换:$var = (type)$var
方法:
$fileinfo = finfo_open(FILEINFO_MIME_TYPE); //创建Fileinfo
if(finfo_file($fileinfo, $_FILES['input_name']['tmp_name']) != MIME类型){ //验证文件的MIME类型
unlink($_FILES['input_name']['tmp_name']); //删除文件
//other code
}else{
//code
}
finfo_close($fileinfo); //释放fileinfo(同一个Fileinfo资源可以使用多次)
参考:文件MIME类型大全
XSS攻击:web页面的输入框,可以输入HTML、css、JavaScript代码,攻击者通过输入恶意代码来窃取cookie、重定向、窃取资料等。
nl2br()函数可以将回车符转换成HTML的br标签
PHP5.2提供了过滤器扩展,功能是验证数据和清理数据
过滤变量:
fileter_var($var, filter [, options]);
filter为使用的过滤器类型,有验证过滤器和清理过滤器,options为附加条件
SQL注入攻击:将恶意SQL代码插入SQL查询中,从而改变、破坏、盗取数据。
预防措施:
预处理查询:先使用占位符代替数据的原始串发送到MySQL解析,确保语法有效,之后再单独发送数据,MySQL再使用这些数据进行查询。
优点:
例子:
$link = mysqli_connect("localhost", "my_user", "my_password", "world"); //连接到MySQL
/* 检查连接错误 */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
//第一种:无返回数据的查询
mysqli_query($link, "CREATE TABLE myCity LIKE City");
/* 准备插入数据的声明 */
$query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)";
$stmt = mysqli_prepare($link, $query);
mysqli_stmt_bind_param($stmt, "sss", $val1, $val2, $val3);
$val1 = 'Stuttgart';
$val2 = 'DEU';
$val3 = 'Baden-Wuerttemberg';
/* 执行查询 */
mysqli_stmt_execute($stmt);
$val1 = 'Bordeaux';
$val2 = 'FRA';
$val3 = 'Aquitaine';
/* 执行查询 */
mysqli_stmt_execute($stmt);
/* 关闭声明 */
mysqli_stmt_close($stmt);
//第二种:有返回数据的查询
$query = "SELECT Name, CountryCode, District FROM myCity";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]);
}
mysqli_free_result($result);
}
/* 关闭MySQL连接 */
mysqli_close($link);
mysqli_stmt_execute()第二个参数用于格式化字符(类似printf第一参数):
预防暴力破解登录的方法:
本文标签: PHP
暂无评论,赶紧发表一下你的看法吧。