PHP安全表单

PHP安全表单,php,forms,security,Php,Forms,Security,我在我的网站上有一个联系邮件表单,我想让这个表单足够安全。 这是最好的方法来完成这项工作,有没有任何方法隐藏php变量,我发送后到另一个页面 有任何样本、链接或想法吗 安全-我的意思是我的数据是安全的,因为用户将插入他们的个人数据,如护照号码、ssn等,并希望这些数据以某种方式是安全的。我在某个地方读到过,通过一些注射,有些人可以获取通过表格发送的数据。我想我现在明白了 使用或 HTML净化器 HTML净化器是符合标准的 用PHP编写的HTML过滤器库。 HTML净化器不仅会删除所有 恶意代码通

我在我的网站上有一个联系邮件表单,我想让这个表单足够安全。 这是最好的方法来完成这项工作,有没有任何方法隐藏php变量,我发送后到另一个页面

有任何样本、链接或想法吗

安全-我的意思是我的数据是安全的,因为用户将插入他们的个人数据,如护照号码、ssn等,并希望这些数据以某种方式是安全的。我在某个地方读到过,通过一些注射,有些人可以获取通过表格发送的数据。我想我现在明白了

使用或

HTML净化器

HTML净化器是符合标准的 用PHP编写的HTML过滤器库。 HTML净化器不仅会删除所有 恶意代码通常被称为 经过彻底审核的XSS, 安全但允许的白名单

OWASP

开放式Web应用安全 项目OWASP是所有项目的名称 OWASP的活动 基金会:< /P>
如果说安全,你的意思是相对不受垃圾邮件发送者的攻击,那么在许多其他方法中,一个好办法是为最终用户提供一个电子邮件输入字段,让他们将回复放在其中,实际上强制执行有效的MX实体

     function isValidEmail($email){

       $pattern = '/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*
\@([a-z0-9])*(\.([a-z0-9])([-a-z0-9_-])([a-z0-9])+)*$/i';

    if(!preg_match ($pattern, $email)){return false;}



        list($user_name, $mail_domain) = explode("@",$email); // Split email address into username and domain name

        if (checkdnsrr($mail_domain, "MX")) return true;

        return false; // Invalid email address
        } 
当然不是一个全面的解决方案,但它确实有助于减少自动提交。

您应该:

要求您的用户应用验证码或登录,使机器人更难使用您的邮件表单。 仅在可能的情况下将邮件发送到预定义的地址。 仅接受POST no GET,以防止CSRF。 禁止在邮件中使用HTML。
为什么没有人提到HTTPS


只需使用HTTPS协议提交表单,所有数据都是透明加密的,这意味着您无需在PHP中对其进行任何解密,它就可以正常工作。HTTPS协议是最好的解决方案。 对于垃圾邮件保护,您可以使用验证码。
如果要将变量从一台服务器传递到另一台服务器,可以使用加密使其受到更大的保护

什么是安全的?“这可能意味着很多事情。”“不,问题是:什么是足够的?在什么方面是安全的?”?你想发送什么“PHP变量”?只有通过使用SSL证书加密所发布数据的交换并保护其免受任何窃听,才能真正实现这种安全。虽然你说这是一个邮件表单,但我绝对不会打算在电子邮件中发送任何人的SSN,因为电子邮件本身是一种不安全的媒介。如果你处理敏感的用户数据,如护照或信用卡号码,请雇佣一位了解一些基本安全性的称职开发人员。如果我认为处理这些数据的系统是由不知道HTTPS是什么的人编写的,我会非常担心。你应该详细说明一下。@Gumbo:我认为链接就足够了。总之,他补充道:@Gumbo问题是这个问题很模糊。HTML净化器可能不合适,OWASP的建议也可能与这个问题无关。然而五月。这个答案当然是瞎猜。@Artefactor:大家一致同意的问题不是很清楚,但它涉及到安全性,所以我发布了一些关于安全性的可能解决方案。如果问题再清楚一点,我会说得更具体。@sAc:不,仅仅发布链接是绝对不够的。您应该添加一些信息,说明在浏览这些链接时可以找到什么。类似于:“如果您想允许一些HTML,请使用HTML净化器。有关web应用程序安全性的一般建议,请参阅OWASP。”如何使用https协议提交我的表单。这些日期将如何被解密到你想发送给他们的电子邮件中?你需要在服务器上安装SSL证书,并通过注册器激活。然后,您可以使表单页面中的所有元素(包括表单自己的操作属性)使用https://打开https连接。这将加密客户端和服务器之间的通信。但是,通过PHP发送SSN号码或非常敏感的个人信息仍然是一个坏主意。如果不要求收件人自己解密或使用特殊客户端,则无法发送加密电子邮件。实际上,这里有一个相关的问题:。无论如何,你绝对不应该用明文发送SSN或其他敏感信息,因为这不是检查有效电子邮件地址的好方法。正则表达式是更好的解决方案。PS:我不是那个否决它的人,但我相信这就是他们这么做的原因。我可以同意这一点——当我复制我的旧文件时,实际上并没有发现这一点——我现在使用的文件有filter\u var$email、filter\u VALIDATE\u email,然后是域检查。mx部分正是我想要强调的,我甚至忘了在旧代码中检查前半部分。