1

在php中,我有以下正则表达式:

$regexp = "/^([-a-z0-9.,!@'?_-\s])+$/i";

我试图验证我的网站联系表(特别是消息字段)以确保没有输入讨厌的代码。我遇到的问题是我需要允许某些正常的标点符号和字符,但我担心它们可能被用来插入恶意代码。

对于不遵守上述表达式的任何字符,我想替换它以使其安全。两个问题:

  1. 我该如何更换?
  2. 我应该用什么替换字符?例如,我不允许括号( )。像这样替换"(" ")"还是最好的做法\( \)

编辑

数据将发送到电子邮件地址并保存到数据库

4

2 回答 2

1

嗯,你为什么不让每个字符都插入到联系表单中,一旦表单提交后到达 php 脚本,就用htmlentities将它们全部转换?这样您的用户将能够说出他们想要的内容,并且您不会对“恶意代码”有任何问题:)

And do not forget to use a proper database wrapper (PDO)
or at least escape when inserting into the database.

– knittl

编辑:添加了 Knittl 的引用再次强调它:)

于 2013-02-07T16:12:15.040 回答
0

使用过滤器扩展。更具体地说,使用filter_input()带有消毒过滤器的功能。例如:

$message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING);

这将确保标签被从消息中去除,并且处理起来更安全。

但是,这并不意味着您应该将其视为 100% 安全。将消息保存到数据库时仍然需要采取预防措施(例如使用数据库驱动程序的转义方法,并从消息中删除不需要/不需要/可疑的内容),并确保输出到客户端是安全的.

于 2013-02-08T03:22:42.623 回答