Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 文本区域中是否存在未初始化的用户输入显示的风险?_Html_Security_Xss_Sanitization - Fatal编程技术网

Html 文本区域中是否存在未初始化的用户输入显示的风险?

Html 文本区域中是否存在未初始化的用户输入显示的风险?,html,security,xss,sanitization,Html,Security,Xss,Sanitization,我按以下顺序保存两个版本的用户输入: 不受信任的用户输入原始降价 原始降价存储在一个表中 原始标记的副本将转换为HTML HTML经过净化和持久化,并根据请求显示 仅当用户编辑条目时,才会显示原始降价版本;它被加载到表单的文本区域中 将原始标记(可能包含不安全的HTML)加载到文本区域是否存在任何风险?它永远不会显示在文本区域之外 我无法清理标记,因为它会导致标记与我正在保存的HTML版本之间的不一致 仅供参考:我总是清理SQL,不管我将什么保存到数据库。这取决于您如何将其“加载”到文本区域。如

我按以下顺序保存两个版本的用户输入:

  • 不受信任的用户输入原始降价
  • 原始降价存储在一个表中
  • 原始标记的副本将转换为HTML
  • HTML经过净化和持久化,并根据请求显示
  • 仅当用户编辑条目时,才会显示原始降价版本;它被加载到表单的文本区域中
  • 将原始标记(可能包含不安全的HTML)加载到文本区域是否存在任何风险?它永远不会显示在文本区域之外

    我无法清理标记,因为它会导致标记与我正在保存的HTML版本之间的不一致

    仅供参考:我总是清理SQL,不管我将什么保存到数据库。

    这取决于您如何将其“加载”到
    文本区域。如果您是通过简单的字符串连接在服务器端实现的,例如在php中

    $output = '<textarea>' + $markdown + '</textarea>';
    
    $output=''+$markdown+'';
    
    …那绝对是有风险的,因为降价可以很容易地关闭
    textarea
    并嵌入它想要的任何内容。如果您使用的是某种组件框架(例如ASP.NET),那么只要使用安全的API方法,您就应该受到保护,例如
    MyTextArea.Value=markdown

    如果你是在客户端做的,这也取决于你是如何做的。如果您使用jQuery的
    .val()
    setter之类的工具,您将是安全的,但仍然可以通过其他方法暴露自己的XSS漏洞


    简言之,一般的答案是肯定的,这取决于您实际如何创建和填充
    文本区域

    您至少在做SQL吗?在插入或更新数据时,您是在使用某种类型的DAO来转义SQL,还是在使用Java时,使用预先准备好的语句来设置参数

    您必须始终在事物进入数据库之前对其进行消毒。否则,人们可能会添加一个流浪汉

    '); --Malicious procedure here.  
    
    …变成一个请求

    在文本框中保留未初始化的输入存在一些安全风险;主要是如果用户感染了注入Javascript的东西,每次都会显示出来


    为什么还要保存呢?然后你给你的用户一个完全不一致的视图,从他们输入的内容到显示的内容?他们不匹配。最好清除输入,这样当用户再次查看时,他或她可以清楚地看到,为了安全起见,已删除了有问题的HTML

    您不必在那里对其进行清理,只需正确转义HTML特殊字符,如<和>


    例如,Stackoverflow允许您在帖子中发布HTML代码,它不会删除任何内容。这是通过编码而不是清理来实现的。

    我会清理所有SQL语句。我绝对需要一个原始版本。这让我的用户能够准确地看到他们在文本区域中输入的内容。我想让他们远离HTML,除非他们选择使用HTML。。。一辆出租车。当你编辑一篇文章时,他们会加载一个原始的降价版本,而不是我们在文章页面上看到的煮熟的HTML版本。你能澄清一下“这是通过编码而不是消毒来实现的”是什么意思吗?举一个小例子会很有帮助。我最近刚刚发布了一个涉及HTML编码的答案——也许它可以作为一个简单的解释:我看到了@jmar777。很好的解释。谢谢我应该把一切都编码。当我不想编码某些标签时,问题就出现了。例如和。。。