不使用服务器端验证的后果?

不验证服务器上的简单电子邮件表单的后果是什么?

请记住:

  • JavaScript验证正在进行中
  • 没有问题的数据库,这是一个简单的电子邮件表单
  • 我想使用的PHP代码是这样的:

    <?php
        $post_data = filter_input_array( INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS );
    
        $full_name = $post_data["full_name"];
        $email_address = $post_data["email_address"];
        $gender = $post_data["gender"];
        $message = $post_data["message"];
    
        $formcontent = "Full Name: $full_name nEmail Address: $email_address nGender: $gender nMessage: $message n";
        $formcontent = wordwrap($formcontent, 70, "n", true);
    
        $recipient = "myemail@address.com"; $subject = "Contact Form"; $mailheader = "From: $email_address rn";
    
        mail($recipient, $subject, $formcontent, $mailheader);
    
        echo 'Thank You! - <a href="#"> Return Home</a>'; 
    ?>
    

    简单的验证码可以解决安全问题吗?

    更新:

    我真的很想回答几个问题:如果我不担心发送无效数据,那么我可以做的绝对最低限度是提高安全性。 基本上避免灾难。

    我应该提到这个代码是在表单生成器中生成的,我想避免我的用户受到攻击。 垃圾邮件可能会通过添加验证码进行排序。

    更新:什么是最坏的情况?

    更新:真的很感谢所有的答案!

    我打算做的一些事情:

  • 添加此作为亚历克斯提到:filter_var(“$ post_data ['email_address']”,FILTER_VALIDATE_EMAIL);

  • 添加简单的验证码

  • 如果我确实添加了简单的服务器端验证,我应该验证哪些内容? 即使我正在验证它,用户仍然发送无效数据吗?

    此外,以上将阻止垃圾邮件?


    一般来说,如果你只是在玩耍而不在乎,你根本不需要验证。 有客户端验证是毫无意义的,你只会浪费你的时间。 仅客户端方法会给你带来麻烦。 你无法相信你的用户。

    如果您打算实际发布该版本或真正在实时环境中使用它,则必须具有服务器端验证。 这是值得的,因为现在这是一种简单的形式,但它可能会长得多。 另外,如果你现在处理你的验证,你可以稍后在应用/站点的其他组件中重用它。 如果您尝试着考虑可重用性的条款,那么您将节省数不清的开发时间。

    正如其他用户所提到的,还有一些明显的问题,例如注入和javaScript问题。 另外,简单的CAPTCHA不会再削减它。 有关于CAPTCHA的一些很好的资源。

    看看那些。

    编码恐怖

    Decapther

    所以你的问题的简单答案是,你目前的状况肯定很脆弱。 我知道更多的开发需要更多的时间,但是如果您遵循良好的开发实践(如可重用性和正交/模块化设计),则可以节省大量时间并且仍然可以生成强大的应用程序。

    祝你好运!

    更新:您可以添加FILTER_VALIDATE_EMAIL来照顾电子邮件验证,您可以在这里阅读更多关于电子邮件注入以及如何照顾它的信息:damonkohler。 至于验证码,它可以解决这个问题,但是这实际上取决于你的表单/网站对象的价值。 我会推荐使用非线性变换或者被广泛使用和证明的东西。 如果你自己写自己,你可能会陷入困境。

    概要:

  • 确认电邮
  • 仍然要确保您不用注射
  • 确保CAPTCHA足够强大
  • 真的考虑服务器端验证
  • 更新:@kht你是否回答了你的问题? 让我们知道,如果有什么不清楚。 祝你好运!

    更新:好的,我想我们已经让你在整个客户端/服务器端的失败中感到困惑。 我会尽力把它分解下来,这样更有意义。 第一部分解释一些基本概念,第二部分回答你的问题。

    首先,PHP是一种服务器端语言。 它运行在服务器上,当发送页面请求时,服务器将“运行”PHP脚本,对所请求的页面进行任何更改,然后将其发送给请求该页面的用户。 用户无法访问/控制该PHP脚本。 相反,如前所述,客户端脚本(如JavaScript)可以被操纵。 但是,仅仅因为您有一些PHP脚本正在运行并在表单上检查某些内容,这并不意味着该表单是安全的。 这只意味着你正在做一些表单的服务器端处理。 把它放在那里,让它变得安全是两件不同的事情,我相信你已经知道了。

    现在,当我们说你需要服务器端验证时,我们的意思是你需要一个好的。 另外,在这种繁忙的问答形式中,没有人真正提到验证数据和清理数据是有区别的。

    消毒 - 使数据符合一些标准

    验证 - 检查数据是否符合标准

    查看一下phpnightly以获得更好的解释和示例。 还有一些很好的简单教程描述了如何创建表单的基本验证。

    NETTUTS

    非常基本,但你应该明白。

    那么你如何解决你目前的问题?

  • 首先,你应该保持你的条款或客户端验证,并添加验证码,如你所说(检查我的文章,或者你可以研究一些好的)。

  • 你应该验证什么?

    一个。 你应该验证数据:所有领域例如电子邮件,名字,主题...

  • 检查数据是否符合您的预期:提交的内容是否为空? 这是一封电子邮件吗? 它是否包含数字? 等等。您可以在服务器端验证数据,以确认您在用户端验证它的相同事情。 唯一的区别是客户端无法操作该验证。
  • 湾 你也可以清理数据

  • 使它小写并比较它,修剪它,甚至将它转换成一个类型,如果你需要的话。 如果你有时间检查一下,那么来自phpnighty的文章对这两者有一个体面的解释,什么时候不能同时使用。
  • 用户仍然可以发送无效数据吗?

  • 确定他们可以,但现在他们无法使用验证算法,他们不能仅仅禁用它或绕过它(严格来说)
  • 当数据无效或恶意时,只需通知用户存在错误并使其再次执行。 这是服务器端验证的要点,您可以防止用户规避规则,并且可以提醒他们其输入无效
  • 也要非常小心的错误信息; 不要透露太多您正在用于验证的规则,只是告诉他们您的期望
  • 此外,以上将阻止垃圾邮件? 如果你确保表单不容易受到电子邮件注入的攻击,那么你可以通过客户端验证,CAPTCHA和某种形式的服务器端验证(它不一定非常复杂),它可以阻止垃圾邮件。明天这个伟大的解决方案并不是那么棒)

  • 当我的客户端验证工作正常时,为什么我需要服务器端公牛 *认为它有一个安全网。 如果垃圾邮件发送者绕过客户端安全性,服务器端安全性仍然存在。

  • 这个验证听起来像很多工作,但实际上很简单。 看看我包含的教程,我相信代码会让事情发生点击。 如果您确保没有不必要的信息通过表单发送,并且客户端无法操作表单发送至多个电子邮件,那么您几乎可以安全。

    我只是把这一个写在了我的头顶,所以如果它很混淆,只是提出一些问题或者给我发一条消息。 祝你好运!


    没有验证发生在没有javascript存在的时候 ,可能还没有验证 ...

    你认为垃圾邮件机器人启用了JavaScript吗?

    特别注意的是攻击者

    如果我正在攻击你的表单,我会首先看到你的javascript验证。接下来,我将关闭javascript,然后再试一次...

    仅使用客户端验证的后果与根本不使用验证相同...

    简单的验证码可以解决安全问题吗?

    除非它是服务器端...


    如果没有验证,他们可以使用注入来添加CC:和BCC等值:通过表单将电子邮件发送给多个其他人。 所以我会建议你至少加入:

    filter_var("$post_data['email_address']", FILTER_VALIDATE_EMAIL);
    

    如果您检查电子邮件是有效的,他们可以做的最糟糕的事情就是向您发送无效数据。

    链接地址: http://www.djcxy.com/p/92681.html

    上一篇: Consequences of not using server side validation?

    下一篇: How to check if an email address exists without sending an email?