联系表格的正则表达式替换

时间:2013-02-07 15:51:19

标签: php regex preg-replace

在php中我有以下reqular表达式:

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

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

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

  1. 如何更换?
  2. 我该怎样替换角色?例如,我不允许括号( )。最佳做法是替换为"(" ")"还是\( \)
  3. 修改

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

2 个答案:

答案 0 :(得分: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的引用再次强调它:)

答案 1 :(得分:0)

使用filter extension。更具体地说,将filter_input()函数与sanitizing filter一起使用。例如:

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

这将确保从邮件中删除标记,并且处理起来更安全。

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