过滤输入 (即来自所列数据源中的任何数据)是指,转义或删除不安全的字符。在数据到达应用的存储层之前,一定要过滤输入数据。这是第一道防线。假如网站的评论表单接收html,默认情况下

访客可以毫无阻拦地在评论中加入恶意的<script>标签,如下标示:

<p>
我的测试
</p>
<script>alert(123)</script>

上面例子。如果不过滤这个评论,恶意代码会存入数据库,然后再网站的标记中渲染。

HTML

我们可以使用htmlentities或者htmlspecialchars函数来过滤html,把特殊字符转换成对应的html实体。

htmlentities这个函数转换所有含有对应“html实体”的特殊字符,比如货币表示符号欧元英镑等、版权符号等,htmlspecialchars 只是把某些特殊的字符转义了, & " ' < >

这2个函数比较傻,默认是不会转义单引号的

$str='<a href="test.html">\'测试页面\'</a><script>alert(213)</script>'; 

//并没有转义单引号
echo $str;
echo "<hr/>".PHP_EOL;
echo htmlentities($str);
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str);

需要设置第2个参数 ENT_QUOTES,具体可以看php手册

echo htmlentities($str,ENT_QUOTES,'UTF-8'); //单引号也转义
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str,ENT_QUOTES,'UTF-8');//单引号也转义

以上例子并不能区别出htmlentities和htmlspecialchars ,下面换上一些特殊的字符,如欧元等。htmlentities将会对此转义,htmlspecialchars却不会

echo htmlentities('€ <>"').PHP_EOL;
echo "<hr/>".PHP_EOL;
echo htmlspecialchars('€ <>"').PHP_EOL; //€没有转义

结论:做一般表单提交的时候完全可以用strip_tags去除html标签,如果涉及到富文本编辑器需要保留html标签,可以用htmlspecialchars对提交数据进行过滤。

更详细的总结参考:https://segmentfault.com/q/1010000004067521

过滤输入htmlentities与htmlspecialchars用法的更多相关文章

  1. php过滤字段htmlentities,htmlspecialchars,strip_tags

    1.strip_tags:过滤html标签比如<a> <html> <script> 如: $str = '<a href="test.html&q ...

  2. Javascript高级编程学习笔记(77)—— 表单(5)过滤输入

    在日常实践中,我们常常会需要用户按照某种规则输入数据 但是文本框在默认情况下缺少验证数据的手段,因此需要使用JS来完成此类过滤输入的操作 通过事件和DOM的结合手段就能够将普通的文本框转换为功能型控件 ...

  3. php htmlentities和htmlspecialchars 的区别

    很多人都以为htmlentities跟htmlspecialchars的功能是一样的,都是格式化html代码的,我以前也曾这么认为,但是今天我发现并不是这样的.   The translations ...

  4. 自定义异常类;键盘输入;try catch用法

    相关考点:自定义异常类:键盘输入:try catch用法 1.设计一个java程序,自定义一个异常类,从键盘输入一个字符串,如果等于“abc”,则抛出异常. public class MyExcept ...

  5. PHP表单安全过滤和防注入 htmlspecialchars() 和test_input()

    什么是 htmlspecialchars() 函数? htmlspecialchars() 函数把特殊字符转换为 HTML 实体.这意味着 < 和 > 之类的 HTML 字符会被替换为 & ...

  6. 关于htmlentities 、htmlspecialchars、addslashes的使用

    1.html_entity_decode():把html实体转换为字符. Eg:$str = "just atest & 'learn to use '"; echo ht ...

  7. strip_tags、htmlentities、htmlspecialchars的区别

    一.strip_tags() 函数剥去字符串中的 HTML.XML 以及 PHP 的标签. strip_tags(string,allow) 注释:可通过allow设置允许的标签.这些标签不会被删除. ...

  8. C语言学习笔记(三) 输入输出函数的基本用法以及运算符

    printf() ——将内容输出到显示器上 四种用法 1.printf("字符串");   直接输出字符串 2.printf("输出控制符",输出参数); 3. ...

  9. PHP htmlentities 和 htmlspecialchars的区别

    一直对这两个转换htm字符为html实体的函数混淆不清,查询了一下文档,总结如下 htmlentities: Convert all applicable characters to HTML ent ...

随机推荐

  1. 如何下载spring的jar包?

    文转载至:https://www.cnblogs.com/yjmyzz/p/3847364.html Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更 ...

  2. Java中的volatile关键字为什么不是不具有原子性

    Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volat ...

  3. MapReduce C++ Library

    MapReduce C++ Library for single-machine, multicore applications Distributed and scalable computing ...

  4. NVMe on RHEL7

    原文地址https://www.dell.com/support/article/cn/zh/cnbsd1/sln312382/nvme-on-rhel7?lang=en Posted on beha ...

  5. ajax控制页面跳转

    一开始我是这么写的,一直报错,跳转路径解析不了,显示为问号: 前台html: <form> <table style="margin: 200px auto;"& ...

  6. mysql更新(四) 数据类型

    07-数据类型   介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考链接:http://www.runoob.com/mysql/m ...

  7. python入门第0篇 Windows下python的安装及pip安装和使用

    知识内容: 1. python2和python3安装 2. pip安装及pip命令使用 注:安装python3就可以了,python2除非项目开发需要否则不用安装,目前学习python就使用pytho ...

  8. CentOS 6.6下Cacti安装部署

    Cacti简介 本章结构 常见平台 常见的服务器监控软件 cacti,流量与性能监测为主----http://www.cacti.net/ nagios,服务与性能监测为主---http://www. ...

  9. 微信小程序注册身份证验证

    // 校验身份证号 //校验码校验 checkCode: function (val) { var p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2])) ...

  10. 3 并发编程-(进程)-join方法

    1.查看当前进程的进程号getpid() 和 其父 进程号 getppid() # 查看进程的pid from multiprocessing import Process import time,o ...