在php中我有以下reqular表达式:
$regexp = "/^([-a-z0-9.,!@'?_-\s])+$/i";
我试图验证我的网站联系表单(特别是消息字段),以确保没有输入令人讨厌的代码。我遇到的问题是我需要允许某些正常的标点符号和字符,但我担心它们可能会被用来插入恶意代码。
对于任何不遵守上述表达的角色,我想替换它以使其安全。两个问题:
( )
。最佳做法是替换为"(" ")"
还是\( \)
?修改
数据将被发送到电子邮件地址并保存到数据库
答案 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%安全。将消息保存到数据库时仍需要采取预防措施(例如使用数据库驱动程序的转义方法,并从消息中删除不需要/不需要/可疑的东西),以及确保输出到客户端是安全的