javascript - jQuery清理注释并链接URL

标签 javascript jquery regex comments sanitize

就jQuery(或Javascript)而言,当人们在Facebook,Twitter或博客上发表评论时,幕后会发生什么?

例如,他们是否先清除文本,然后将URL的模式匹配到实际链接中?除了在后端进行一些检查之外,客户端还应该检查其他一些令人关注的问题吗?

I have found一些用于将URL转换为链接的正则表达式,但是我不确定是否有更好的解决方案。

我正在努力解决问题,但是我很难知道从哪里开始。您可以提供的任何指导都将不胜感激!

最佳答案

这是一个见解(我认为),因此我将继续解答。这是我作为互联网的真正公民的选择:


有两种类型的“清理”:一种是语义清理,检查输入以确保输入的内容是正确的(电话号码,邮政编码,货币金额,等等)。另一个是防御性消毒,这(再次,我认为)是一种普遍误导的,用户敌视的活动。
确实,输入从来没有真正令人恐惧,除非它涉及到某些东西:数据库服务器,HTML渲染器,JavaScript解释器等等。清单很长。


关于第1点,我认为防御性清理是错误的,因为它忽略了以上第2点:在不知道要防御恶意输入的环境的情况下,如果不严格限制输入字母,甚至在处理过程中也无法真正对其进行清理可能正在与自己抗争。它对用户不利,因为它不必要地限制了合法用户可以使用他们想要保留在帐户中的数据执行的操作。谁说我想在“注释”或“昵称”或“注释”字段中包含看起来像XML,SQL或任何其他语言的特殊字符的字符?如果没有语义上的理由来过滤输入,为什么要对您的用户呢?

第二点确实是关键所在。用户输入可能很危险,因为服务器端代码(或客户端代码)可以将其直接移交给毫无疑问的解释环境,在该环境中,对每个不同环境重要的元字符可能会导致意外行为。如果您通过将未修改的用户输入直接粘贴到查询模板中而直接将其输入给SQL,那么恶意用户可以使用特殊的SQL元字符(如引号)以您绝对不希望的方式来控制数据库。但是,仅凭这一点,就没有理由阻止我告诉你我的名字叫“奥亨利”。

要点2的关键问题是存在许多不同的解释环境,就用户输入所造成的威胁而言,每种解释环境都是完全不同的。让我们列出一些:


SQL-用户输入中的引号是一个潜在的大问题;特定的数据库服务器可能具有其他可利用的语法约定
HTML-当用户输入直接放入HTML中时,浏览器的HTML解析器将很乐意服从嵌入式标记告诉它的操作,包括运行脚本,加载跟踪器图像以及其他任何内容。关键的元字符是“ <”,“>”和“&”(后者并不是因为受到攻击,而是因为它们造成的混乱)。担心引号也是一件好事,因为用户输入可能需要放入HTML元素属性中。
JavaScript-如果页面模板需要将一些用户输入直接放入某些正在运行的JavaScript代码中,则需要担心的事情可能是引号(如果将输入视为JavaScript字符串)。如果用户输入需要输入正则表达式,则需要进行更多的清理。
日志文件-是的,日志文件。您如何看待日志文件?我在Linux机器上的一个简单命令行窗口中执行此操作。这样的命令行“控制台”应用程序通常遵循古老的“转义序列”,该序列可以追溯到旧的ASCII终端,用于控制光标位置和各种其他操作。好吧,精心设计的用户输入中嵌入的转义序列可以用于利用这些转义序列的疯狂攻击。一般的想法是将一些用户输入放入某个日志文件中(可能作为页面错误日志的一部分),并诱使管理员在xterm窗口中滚动浏览日志文件。狂野吧?


这里的关键点是,保护这些环境免受格式错误或恶意输入所必需的确切技术,彼此之间的区别很大。保护SQL Server免受恶意引号与保护HTML或JavaScript中的引号是一个完全不同的问题(请注意,这两个引号也完全不同!)。

底线:因此,我的意见是,当担心潜在的格式错误或恶意输入时,应将注意力集中在写入用户数据而不是读取数据的过程上。当您的软件与每个解释环境配合使用用户提供的数据的每个片段时,必须执行“引用”或“转义”操作,并且它必须是特定于目标环境的操作。安排的确切程度可能在各地有所不同。例如,传统上在SQL中,人们使用预备语句,尽管有时预备语句的不足使该方法变得困难。吐出HTML时,大多数服务器端框架都具有各种内置的HTML或XML挂钩,并使用实体符号转义(例如&amp;表示“&”)。如今,保护Java事物最简单的方法是利用JSON序列化器,尽管当然还有其他方法。

关于javascript - jQuery清理注释并链接URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963602/

相关文章:

c++ - 在 C++ 中检索正则表达式搜索

regex - 如何在Solr 4中使用正则表达式进行查询

javascript - 使我的网页反色

javascript - 自动执行电子邮件中的 Javascript 或恶意代码

javascript - 从缓存加载后,如何强制 Service-worker 从网络请求路由?

javascript - 无法让简单的 text_area 字符计数器工作

javascript - 提交操作

c# - 什么是正则表达式平衡组?

javascript - JavaScript 和 jQuery 中的单击源,人工还是自动?

javascript - AngularJS:ng-keypress 不工作