PHP良好实践 --过滤验证和转义
过滤输入、验证数据、转义输出
- $_GET
- $_POST
- $_REQUETS
- $_COOKIE
- $arvg
- php://stdin
- php://intput
- file_get_content()
- 远程数据库
- 远程API
- 来自客户端的数据
过滤输入
- HTML 输入过滤
- 在外部数据到达引用存储层之前,一定要过滤输入数据
- 使用htmlentities()函数(http://php.net/manual/zh/function.htmlentities.php)过滤html, 把特殊字符转换成对应的HTML实体
<?php $input = '<p><script>alert("hello world")</script></p>'; echo htmlentities($input, ENT_QUOTES, 'UTF-8'); 输出: <p><script>alert("hello world")</script></p>
- SQL 查询
- 使用
PDO预处理语句
对SQL进行过滤,防止sql注入$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'root'); $stmt = $dbh->prepare("UPDATE LEFT_TABLE SET lname = :lname WHERE lid = :lname"); $stmt->bindParam(':lid', $lid); $stmt->bindParam(':lname', $lname); $lid = '10'; $lname = 'ten";--'; $stmt->excute(); $stmt = null;
- 用户资料信息
filter_var()
和filter_input()
函数 能够使用不同的的参数过滤不同类型的输入:电子邮件地址、URL编码字符串、整数、浮点数、HTML字符、URL和特定范围内的ASCII字符
验证数据
- 我们可以使用filter_var() 函数对数据进行验证
转义输出
将数据渲染为网页或者API响应时,一定要转义输出。
可以使用htmlentities()进行转义输出。