2010-11-17 91 views
0

我有一个表单,并且现在,您可以键入任何JavaScript等等。任何XSS等。从Javascript保护HTML表单/攻击

我该如何着手创建白名单,以便您只能发布字符。

在某一点上,我想任何与http://开始转换为

<a href="http://..."></a>

感谢

是这有效吗? http://htmlpurifier.org/

+4

你知道你不能使用客户端代码进行数据验证 - 你的用户可以关闭JS。所以,除非你运行服务器端JavaScript,否则你将不得不在服务器端使用另一种语言检查脚本标记/坏字符的存在...... – tobyodavies 2010-11-17 08:17:02

+0

谢谢,我现在意识到了。你能推荐任何预先构建的解决方案吗? – switz 2010-11-17 08:33:53

+0

你使用的服务器端脚本是什么?它是PHP,.net。 perl,... – sathish 2010-11-17 08:36:24

回答

7

的jQuery或JavaScript是首选

哦,不,你不能这样做,你看到了什么?因为即使你“消毒”使用JavaScript您的数据,没有人的距离

  • 停止任何人关闭JavaScript的
  • 使用浏览器的开发者控制台乱用数据
  • 直接做POST,没有浏览器

换句话说,您必须在服务器端执行验证/清理。 Javascript验证可以提高用户的体验(例如,通过提供对无效输入的即时反馈)。

+0

我明白了。那么,你推荐使用什么呢?谢谢 – switz 2010-11-17 08:25:03

+0

??? @Switz,shylent提出了一些建议:'(...)你必须在服务器端执行验证/消毒。“# – acm 2010-11-17 09:49:19

1

但是,在许多高负载应用程序开发人员使用部分客户端验证(但所有输入必须准备写入数据库)。因为你将使用PHP,我建议你用htmlspecialchars(),mysql_real_escape_string()等解析你的$ _POST值。您必须使用正则表达式将任何以“http://”开头的内容转换为链接(也可以使用explode('。',$ _POST ['yourInput']),这可以更容易为你)。

+0

非常有用的谢谢:)更新你的文章:mysql_real_escape_string在PHP 5.5.0中被弃用,它在PHP 7.0.0中被删除。资料来源:http://php.net/manual/en/function.mysql-real-escape-string.php – 2017-01-18 06:36:40