【问题标题】:Silverstripe HTML Field ValidationSilverstripe HTML 字段验证
【发布时间】:2016-01-24 03:27:37
【问题描述】:

我试图弄清楚如何允许用户在我正在制作的网站的个人资料中填写他们的“关于”字段。最大的缺点是我希望用户能够像您在论坛上发帖时那样格式化他们的文本,或者像 Silverstripe 用户在您进入管理面板时那样格式化它。

我尝试过使用 silverstripe 中的 HTML 字段。当我添加该框时,它为您提供了这个非常好的文本框,可以接受任何内容,html、javscript 等...

这很好,很花哨,以至于我意识到了两个刺痛。对于 HTML 字段,没有任何形式的用户可以使用的编辑器。他们不能加粗、更改字体、大小等...另一个问题是我在其中输入了一些 javascript 并单击了保存。下次我打开页面时,我会收到我在 HTML 字段中输入的 javascript 警报。

所以这是我的两个问题:

我怎样才能给用户一个编辑器(任何类型的),让他们能够塑造他们的 about 部分。

如何验证允许您执行我在第一个问题中提出的问题的字段?我对验证此类输入很陌生,而且我一直在寻找很长一段时间,但几乎没有答案。

编辑:

我忘了包括我确实找到了这个指南:https://docs.silverstripe.org/en/3.1/developer_guides/forms/field_types/htmleditorfield/

从我在这里看到的是如何将其包含在后端(管理控制台)中,但我不知道如何将其包含在让我们说 AboutMe 页面上。所以 www.mywebsite.com/AboutMe/edit/1

编辑2:

进一步的研究为我提供了一个解决方案,让我可以在我的页面上显示 TinyMCE 编辑器。我上面列出的文档并没有说缺少 init 函数,我需要将它添加到页面中才能使编辑器工作。以下是缺少的内容:

<script type="text/javascript">

tinyMCE.init({
theme : "advanced",
mode: "textareas", 
theme_advanced_toolbar_location : "top",
theme_advanced_buttons1 : "bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,outdent,indent,separator,undo,redo",
theme_advanced_buttons2 : "forecolor",
theme_advanced_buttons3 : "",
height:"250px",
width:"400px"
});

</script>

我的第二个问题仍然存在。如何验证此处出现的所有文本? TinyMCE 将通过 javascript 为我做一些验证,但我们总能找到解决方法。我会做什么样的后端 (php) 验证来确保输入的文本是安全的?

我唯一能想到的就是为每个允许的字符组合创建一个白名单,但这似乎有点错误。

【问题讨论】:

  • 尝试搜索 XSS 注入防护。对于第一个问题,您需要一个所见即所得的编辑器。看看 ckeditor、tinymce 和 nicedit。我不知道 silverstripe 是否有内置的。 owasp.org/index.php/…
  • @chris85 它由 TinyMCE 构建,它是所见即所得的编辑器,但是我在网站前端(在管理控制台之外)找不到任何关于如何使用它的文档
  • 我对 silverstripe 不太熟悉,但是如果您还没有看过它,这似乎很有用,docs.silverstripe.org/en/3.1/developer_guides/forms/field_types/…
  • @chris85 是的,这与我在问题中提出的链接相同。不过谢谢,感谢您的尝试!

标签: php validation silverstripe


【解决方案1】:

我想到了几件事。

我知道您已经做到了这一点,但您可以尝试扩展 HTMLEditorField 并使用自己的 TinyMCE 配置以您想要的方式自定义该字段。

至于验证,您可以在您的 DataObject(或任何您将未经处理的 HTML 保存到的位置)上使用 onBeforeWrite() 来清理输入。可能为此使用库,或者如果您只是将标签列入黑名单,则可以使用 PHP 的 strip_tags function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多