一、恶意攻击
Post灌水: 解决:加入隐藏字段 <input type="hidden" name="po" value="va" >
验证码。验证码不显示的原因:1.编码:utf-8; 2. header('Content-type:image/png'); header头前面不允许有空格,在所有<?php ?>两端不能有多余的空格。
二、Sql注入
Post请求:表单中输入特殊字符 如:单引号。 解决:1.加密,md5。 2.转义单引号:站在php的角度用 addslashes()函数;站在mysq的角度用 mysql_real_escape_string()函数
Get请求:自行构造url,提交 加入关键字 or 1#。 解决:1.过滤关键字 or: 转换成int类型: (int)变量 变量+0 intval()函数
三、Xss攻击
脚本(Html)注入: <sctipt></script> </table> 等。解决:1.实体转义 htmlspecialchars()函数、htmlentities()函数
注意:针对用户提交的所有数据(POST数据),都要进行实体转义。
批量实体转义辅助函数:
<?php
//批量实体转义
function deepspecialchars($data){
if (empty($data)) {
return $data;
}
//中高级程序员的写法
return is_array($data) ? array_map('deepspecialchars',$data) : htmlspecialchars($data);
/*
//初级程序员的写法
if (is_array($data)) {
foreach ($data as $k => $v){
$data[$k] = deepspecialchars($v);
}
return $data;
} else {
//单个变量
return htmlspecialchars($data);
}
*/
}