【发布时间】:2015-05-24 21:33:33
【问题描述】:
我的论坛网站上有一个文本区域,想在保存到数据库之前过滤用户输入的文本。我正在使用 sanitize 函数去除所有 html 标签,然后尝试将 gsub 与正则表达式一起使用。以下是我试图在我的控制器中使用的内容-
ActionView::Base.full_sanitizer.sanitize(params[:content]).gsub(/[^0-9a-z\\s#]/im,'')
我可以使用 sanitize 去除 html,但无法为 gsub 方法获取正确的正则表达式。对于我的文本区域,我想允许以下内容进行降价编辑 -
- ###
- ####
- **
- *
- _
- -
- >>
- ~~
- ==
- .
- ://
- 多行换行符
- 空格
- 字母数字字符
为了安全起见,我想用空格替换所有其他字符。
我是 Rails 和正则表达式的新手,所以任何指针都会受到赞赏。任何其他提高安全性的指针也将不胜感激。
TIA
【问题讨论】:
-
为什么你做错了一个很好的论据是:即使被编写和测试,你的代码也会过滤掉标点符号(分号、冒号、逗号等)只是为了过滤掉用户输入的内容不是安全,而是用户的默默无闻。为什么要放弃用户的数学运算 (∀ x ∈ R ⇒ ∃ ...)?
-
请尝试
gsub(/(\#{3,4}|\*{1,2}|[\w. -]+|(?:\r\n|\r|\n){2,}|>{2}|:\/{2}|~{2}|={2})|./) { |m| m == $~[1] ? $~[1] : ' ' }。 -
非常感谢@stribizhev。我已经对其进行了进一步编辑,以包括一些笑脸,! , - 它现在看起来像 -
gsub(/(\#{3,4}|\*{1,2}|[\w. -]+|[\w, +]+|[\w! +]+|[\w: +]+|["\w" +]+|[:-?) +]+|[(\w) +]+|(?:\r\n|\r|\n){2,}|>{2}|:\/{2}|~{2}|={2})|./) { |m| m == $~[1] ? $~[1] : ' ' }。但是你能解释一下花括号中的最后一点是做什么的吗{ |m| m == $~[1] ? $~[1] : ' ' } -
@mudasobwa 感谢您的评论。您认为我应该如何在不限制允许内容的情况下保护我的应用免受恶意用户输入的影响?我是专业网络开发的新手,所以任何指针都将不胜感激......
-
@pari
sanitize应该已经可以保护您免受注射了。只需为用户提供他们不想输入的任何内容的能力,不要搞砸他们。
标签: ruby-on-rails ruby regex ruby-on-rails-4