热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我觉得写的代码98%都是操作字符串的,关心的问题就是字符串从哪儿来,然后把它保存到哪儿去,然后怎么显示给用户

我觉得写的代码98%都是操作字符串的,关心的问题就是字符串从哪儿来,然后把它保存到哪儿去,然后怎么显示给用户,所以我问个数据保存的问题,在数据库中怎么保存呢?现在的动态网站,“动态内容”已经离不开html...

我觉得写的代码98%都是操作字符串的,关心的问题就是字符串从哪儿来,然后把它保存到哪儿去,然后怎么显示给用户,所以我问个数据保存的问题,在数据库中怎么保存呢?

现在的动态网站,“动态内容”已经离不开html了, 而html来自于用户又会不安全,给我们防护造成困难,而如果使用“不给用户提供富文本编辑器”那整个网站出来模板内容以外,其它的内容除了文本就是文本,文章中没有图片,没有样式,清一色的文本,所以我们还是要依赖于富文本。

可是现在我有一个疑问,比如一个文章表tb_article(id,name,content),我们允许用户发布带有图片视频等媒体的文章,那么现在我有一个疑问:

用户post过来的内容是什么我们不管,我们服务器怎么处理这些数据,然后在数据库中该怎么保存呢?

我们假定一篇文章名可以为:alert(1)嘻嘻嘻 ,总之我们不会限制用户不能输入,不能保存什么。

thinkphpI()函数默认使用htmlspecialchars(默认不处理单引号)对数据进行处理,将数据进行html实体编码,如果这样保存到数据库好吗?用户输入的明明是&而保存在数据库里面的却是&,数据库里面保存的和用户输入时的不一致,这样好吗?

而文章内容富文本post过来的很可能是html内容,比如,如果进行html实体编码后保存到数据库的话,在读出来的话,文章内容就不是一张图片了,而是看得见摸得着的纯文本了,所以这种情况该如何考虑呢?难道输出时在进行htmlspecialchars_decode重新解码吗,那这样每次查询文章就要解码一次不会有性能问题吗,每次这样做感觉笨笨的。

我都不知道到底怎么样才是最好的,wordpress,DZ,他们是怎么做的呢?

像一些笔记应用,有道云笔记等又是怎么做的呢?

还是要分不同情况对待?

希望有经验的大神指点一下,谢谢了。

已有类似的问题:
http://segmentfault.com/q/1010000004067521

这个问题已被关闭,原因:与已有问题重复

回复内容:

我觉得写的代码98%都是操作字符串的,关心的问题就是字符串从哪儿来,然后把它保存到哪儿去,然后怎么显示给用户,所以我问个数据保存的问题,在数据库中怎么保存呢?

现在的动态网站,“动态内容”已经离不开html了, 而html来自于用户又会不安全,给我们防护造成困难,而如果使用“不给用户提供富文本编辑器”那整个网站出来模板内容以外,其它的内容除了文本就是文本,文章中没有图片,没有样式,清一色的文本,所以我们还是要依赖于富文本。

可是现在我有一个疑问,比如一个文章表tb_article(id,name,content),我们允许用户发布带有图片视频等媒体的文章,那么现在我有一个疑问:

用户post过来的内容是什么我们不管,我们服务器怎么处理这些数据,然后在数据库中该怎么保存呢?

我们假定一篇文章名可以为:alert(1)嘻嘻嘻 ,总之我们不会限制用户不能输入,不能保存什么。

thinkphpI()函数默认使用htmlspecialchars(默认不处理单引号)对数据进行处理,将数据进行html实体编码,如果这样保存到数据库好吗?用户输入的明明是&而保存在数据库里面的却是&,数据库里面保存的和用户输入时的不一致,这样好吗?

而文章内容富文本post过来的很可能是html内容,比如,如果进行html实体编码后保存到数据库的话,在读出来的话,文章内容就不是一张图片了,而是看得见摸得着的纯文本了,所以这种情况该如何考虑呢?难道输出时在进行htmlspecialchars_decode重新解码吗,那这样每次查询文章就要解码一次不会有性能问题吗,每次这样做感觉笨笨的。

我都不知道到底怎么样才是最好的,wordpress,DZ,他们是怎么做的呢?

像一些笔记应用,有道云笔记等又是怎么做的呢?

还是要分不同情况对待?

希望有经验的大神指点一下,谢谢了。

已有类似的问题:
http://segmentfault.com/q/1010000004067521

保存的时候主要防注入,展示的时候才需要防XSS。

像标题这种铁定纯文本的东西你就直接htmlentities或者htmlspecialchars过滤。正文如果要支持富文本你还需要过滤script等敏感标签。一般有白名单标签过滤和黑名单标签过滤两种。

不过还存在别人用\uxxxx字符串绕过htmlspecialchars过滤的问题。

关于你关注的性能问题,很容易用Cache解决,不必太担心。尽量在数据库里保存原始数据,在展示的环节解决XSS问题,如果过滤代码升级了,直接Flush掉Cache就行了。

另外针对现代浏览器你还可以使用CSP声明信任的script等资源域名白名单。

编码呀同学~~
你的问题可以转换为:如何防御XSS攻击

用户输入的明明是&而保存在数据库里面的却是&,数据库里面保存的和用户输入时的不一致,这样好吗?

  1. 用户看不到你是怎么存储他的消息的

  2. 你在给用户展示时, 只要你不要再过滤一遍html tags就可以让用户无感知的观察到& 而不是&

  3. 病从口入。

  4. 如果你系统足够强大,或者,你根本不在乎xss,你完全可以不用提这个问题的。

你需要htmlpurifier

数据库里存储的应该是用户输入的原始内容,否则用户重新编辑的时候怎么处理?
PHP输出页面时用htmlspecialchars把特殊字符(&,",',<,>)替换为HTML实体(&"&#039;<>).注意,前端JS用innerHTML往页面输出HTML时也要执行类似PHP的htmlspecialchars转换,因为经过JS赋值后,Unicode字符\u003c和\u003e被转换成<和>,而PHP的htmlspecialchars并没有处理\u003c和\u003e.

function htmlspecialchars(str) {
    var map = {
        '&': '&',
        '<': '<',
        '>': '>',
        '"': '"',
        "'": '&#039;'
    };
    return str.replace(/[&<>"']/g, function(m) { return map[m]; });
}

关于HTML标签的支持,比如允许用户输入超链接:
[url=http://www.php.net]PHP[/url]
页面输出时,先用htmlspecialchars过滤,然后用正则匹配拿到[url]这对标签,转换成:
PHP
然后经过HTMLPurifier过滤XSS后输出,因为http://www.php.net这个地方存在XSS注入风险,比如填的是[url=Javascript:alert(String.fromCharCode(88,83,83))]PHP[/url]
如果不经HTMLPurifier过滤,就会产生XSS注入.

XSS测试

推荐阅读
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • php生成shtml类用法的简单介绍
    本文目录一览:1、phpcmsv9怎么生成shtml ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 弹性云服务器ECS弹性云服务器(ElasticCloudServer)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境 ... [详细]
  • 跨站的艺术XSS Fuzzing 的技巧
    作者|张祖优(Fooying)腾讯云云鼎实验室对于XSS的漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做F ... [详细]
  • 2月4日每日安全热点节日期间某企远程办公遭XRed攻击 ... [详细]
  • JVM(三)虚拟机栈 多合一总述
    虚拟机栈概述虚拟机栈出现背景:由于跨平台性的设计,Java的指令都是根据栈来设计的。不同CPU架构不同,所以不能设计为基于寄存器的跨平台的优点:指令集小,编译器容易实现,缺点是性能 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • jvm内存区域与溢出为什么学习jvm木板原理,最短的一块板决定一个水的深度,当一个系统垃圾收集成为瓶颈的时候,那么就需要你对jvm的了解掌握。当一个系统出现内存溢出,内存泄露的时候 ... [详细]
author-avatar
zhaiweibubu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有