2011-08-15 60 views
0

如何为textarea添加安全性,以便用户可以输入的唯一内容(除了普通文本)是一条新行。只允许在textarea中添加新行

实施例:

<textarea> 
For some reason 
I want this on 2 lines 
</textarea> 

任何其他类型的标记不应该被允许。我用htmlentities,strip_tags,nl2br等php安全函数完成了很多测试,我还没有找到任何可以做我想做的事情的东西。有任何想法吗?

更新:我没有任何关于如何htmlentities不适用于我的例子,因为这是来自过去的经验,但如果有人可以提供我如何使用htmlentities来做到这一点的例子,那将是不胜感激!

回答

1

你需要做的就是定义允许值的白名单,其中将包括上下字母字符是什么,行,然后返回其他任何你想允许(标点符号,数字等)的正则表达式很容易做到这一点,你需要在提交时验证文本区域的内容。

此外,请确保您总是在服务器端运行此项。你可以运行它的客户端以及但你必须确保机制不能在浏览器中绕过,因此服务器验证依赖关系。

+0

白名单绝对是服务器端的最佳解决方案,但黑名单 - 如果更简单 - 当然也可以在客户端使用。 – Andreas

+0

感谢您的信息!白名单将是完美的,因为我只想允许
标签。我将如何去做一个白名单? – cbr0wn

+1

安德烈斯 - 黑名单令人不悦的原因在于,要抓住每个你不愿意接受的角色是非常困难的,而且他们非常容易陷入零日,即我们还不知道的攻击。 cbr0wn - 我建议你为此发布另一个问题(或者看看是否已经存在)。你所要求的是一个只允许某些字符的正则表达式。 –

0

这就是你要用“非法”角色做什么的问题。如果你想简单地剪切它们,你可能会发现有用的正则表达式。如果你想逃避它们,只需使用htmlspecialchars()htmlentities()

0

你以后只能用php检查输入,因为PHP在服务器上运行,而不是在客户端运行。如果你想立即检查,你可以使用javascript,但它会减慢用户的输入。

只要信任用户并过滤它,会是我的建议。

HTH

+1

“只要相信用户”通常不会在有关安全性的回复中看到!不需要用JS立即检查它,只需在表单提交时检查它并在服务器上检查它。 –

+0

特洛伊,你也可以信任一个用户,只要求输入两行即可。它不一定是一个安全问题。 ...当然,过滤总是在服务器端。其他一切都是不安全的,可以绝对无用。 – Andreas

+0

我如何过滤除
以外的所有标签? – cbr0wn