案例1:跨站运行脚本
<html>
<form>
<input name="foo" value=' <?php {$_GET['foo']} ?>' >
</form>
</html>
alert('foo')
![](https://img.haomeiwen.com/i11005865/f48f8648e2b6d1b0.png)
![](https://img.haomeiwen.com/i11005865/91181478eda1d4df.png)
上面输入只是简单案例,按照这个思路那么我们可以在里面执行任何JavaScript代码
解决方法:
使用strip_tags()从字符串中去除 HTML 和 PHP 标记或者使用htmlentities()
![](https://img.haomeiwen.com/i11005865/9783ef67ca89d2bb.png)
![](https://img.haomeiwen.com/i11005865/d4f617de4c44b460.png)
案例2:sql注入
select * from user_info from users where user='$user' and pwd='$pwd';
对于上面的sql我们可以输入
http://xxxxx?user=admin'#
解决方法:
对输入进行addslashes()进行转义处理
使用pdo的预处理语句
案例3:校验请求参数是不是被篡改
解决方式:
1.md5校验
大概思路就是将请求参数按照相互约定的顺序(一般是字母顺序)进行拼接,然后MD5,服务端收到请求之后也用同样的规则得到一个MD5值,相互比对两者.相同则代表没有被修改,不同则说明被修改过
![](https://img.haomeiwen.com/i11005865/e9fc1ad71c3a3474.png)
2.进阶校验(HMAC 鉴定信息的关键字散列)
可以使用HMAC,他使用一个加密的键值对明文进行双重散列处理
hash_hmac('md5', $data, $key)
algo 要使用的哈希算法名称,例如:"md5","sha256","haval160,4" 等。
data 要进行哈希运算的消息。
key 使用 HMAC 生成信息摘要时所使用的密钥。
过滤函数
filter_var—使用特定的过滤器过滤一个变量,各种变量校验
filter_var('127.0.0.1',FILTER_VALIDATE_IP) //ip
filter_var('127.0.0.1',FILTER_VALIDATE_EMAIL) //邮箱
同时记录下几个工具,在packagist可以找到
aura/filter
respect/validation
symfony/validator
网友评论