不使用服务器端验证的后果?
不验证服务器上的简单电子邮件表单的后果是什么?
请记住:
我想使用的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。 至于验证码,它可以解决这个问题,但是这实际上取决于你的表单/网站对象的价值。 我会推荐使用非线性变换或者被广泛使用和证明的东西。 如果你自己写自己,你可能会陷入困境。
概要:
更新:@kht你是否回答了你的问题? 让我们知道,如果有什么不清楚。 祝你好运!
更新:好的,我想我们已经让你在整个客户端/服务器端的失败中感到困惑。 我会尽力把它分解下来,这样更有意义。 第一部分解释一些基本概念,第二部分回答你的问题。
首先,PHP是一种服务器端语言。 它运行在服务器上,当发送页面请求时,服务器将“运行”PHP脚本,对所请求的页面进行任何更改,然后将其发送给请求该页面的用户。 用户无法访问/控制该PHP脚本。 相反,如前所述,客户端脚本(如JavaScript)可以被操纵。 但是,仅仅因为您有一些PHP脚本正在运行并在表单上检查某些内容,这并不意味着该表单是安全的。 这只意味着你正在做一些表单的服务器端处理。 把它放在那里,让它变得安全是两件不同的事情,我相信你已经知道了。
现在,当我们说你需要服务器端验证时,我们的意思是你需要一个好的。 另外,在这种繁忙的问答形式中,没有人真正提到验证数据和清理数据是有区别的。
消毒 - 使数据符合一些标准
验证 - 检查数据是否符合标准
查看一下phpnightly以获得更好的解释和示例。 还有一些很好的简单教程描述了如何创建表单的基本验证。
NETTUTS
非常基本,但你应该明白。
那么你如何解决你目前的问题?
首先,你应该保持你的条款或客户端验证,并添加验证码,如你所说(检查我的文章,或者你可以研究一些好的)。
你应该验证什么?
一个。 你应该验证数据:所有领域例如电子邮件,名字,主题...
湾 你也可以清理数据
用户仍然可以发送无效数据吗?
此外,以上将阻止垃圾邮件? 如果你确保表单不容易受到电子邮件注入的攻击,那么你可以通过客户端验证,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?