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

前端之家收集整理的这篇文章主要介绍了php – 不使用服务器端验证的后果?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在服务器上无法验证简单的电子邮件表单的后果是什么?

请记住:

>正在进行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 \r\n";

    mail($recipient,$subject,$formcontent,$mailheader);

    echo 'Thank You! - <a href="#"> Return Home</a>'; 
?>

一个简单的验证码会解决安全问题吗?

更新:

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

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

更新:
最糟糕的情况是什么?

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

我打算做的几件事情:

>添加为亚历克斯提到:
filter_var(“$post_data [’email_address’]”,FILTER_VALIDATE_EMAIL);
>添加简单的验证码

如果我添加了简单的服务器端验证,我应该验证什么?即使我验证它,用户仍然发送无效数据?

另外,以上是否会阻止垃圾邮件

@H_403_35@
@H_403_35@
一般来说,如果你只是玩耍而不在乎,你根本不需要验证.
客户端验证是毫无意义的,你只会浪费时间.客户端唯一的方法会让你有麻烦.你不能相信你的用户那么多.

如果您打算在实际环境中实际发布或真正使用它,则必须具有服务器端验证.这是非常值得的,因为这是一个简单的形式,但它可能会增长到更多.此外,如果您现在关心验证,则可以稍后再与应用程序/站点的其他组件一起使用它.如果您尝试思考可重用性的条款,您将节省您自己无数次的开发时间.

还有其他用户提到的注入和javaScript问题等明显问题.
另外,简单的人机识别技术也不再削减它了.有关CAPTCHA的一些不错的资源.

看看那些.

Coding Horror

Decapther

所以您的问题的简单答案是,您当前在当前情况下肯定是脆弱的.我知道更多的开发需要更多的时间,但如果您遵循良好的开发实践,如可重用性和正交/模块化设计,您可以节省大量的时间,仍然可以生产出强大的应用程序.

祝你好运!

更新:
您可以添加FILTER_VALIDATE_EMAIL来处理电子邮件验证,您可以在这里阅读有关电子邮件注入的更多信息以及如何处理:damonkohler.
对于CAPTCHA,它可以解决问题,但这真的取决于您的表单/网站的目标的价值.我建议使用非线性变换或广泛使用和证明的东西.如果你是自己写的,你可能会遇到麻烦.

概要:

>验证电子邮件
>仍然确保你从注射中保存
>确保CAPTCHA足够强大
>真的考虑服务器端验证

更新:
你有问题回答了吗?让我们知道一些事情不清楚.
祝你好运!

更新:
好的,我想我们在这个整个客户端/服务器端的失败让你有点困惑.我会尝试把它当成现在,这样做更有意义.第一部分解释了一些基本概念,第二部分回答了你的问题.

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

现在,当我们说你需要服务器端验证时,我们意味着你需要一个好的验证.此外,在这个忙碌的问答格式中,没有人真正提到验证数据和消毒数据之间有区别.

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

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

看看phpnightly更好的解释和例子.
还有一些很好的简单教程,描述如何创建表单的基本验证.

nettuts

非常基本,但你应该得到这个想法.

那么你如何处理你目前的问题呢?

>首先,您应该保留您所拥有的内容或客户端验证,并按照您提到的方式添加人机识别系统(CAPTCHA)(请查看我的文章或您可以研究一些好的).
>你应该验证什么?

一个.您应该验证数据:所有字段,如电子邮件,名称,主题

>检查数据是否符合您的预期:是否为空?是电子邮件吗?它包含数字吗?您可以在服务器端验证与在用户端验证的相同的数据.唯一的区别是客户端无法操纵该验证.

湾您也可以清理数据

使它小写并比较它,修剪它,甚至将它转换成一个类型,如果你需要.如果你有时间检查出来,那么PHPnighty的文章对这两个文章有一个很好的解释,而不用这两个.

>用户是否可以发送无效数据?

确保他们可以,但现在他们无法访问验证算法,他们不能只是禁用它或绕过它(严格来说)
>当数据无效或恶意时,只需通知用户发生错误并使其再次执行.这就是服务器端验证的要点,您可以阻止用户规避规则,并且可以提醒他们他们的输入无效
>也要小心错误信息;不要透露您用于验证用户的太多规则,只需通知他们您期望的内容

>此外,以上是否会阻止垃圾邮件
如果您确保该表单不易受到电子邮件注入的攻击,您可以进行客户端验证,CAPTCHA和某些形式的服务器端验证(不必超级复杂),它将阻止垃圾邮件(请保留在我的今天伟大的解决方案明天不是那么好)
>为什么我需要这个服务器端的公牛*当我的客户端验证工作正常?*
认为它有一个安全网.如果垃圾邮件发送者绕过客户端安全,则服务器端的安全性仍然存在.

这个验证的东西听起来好像很多工作,但实际上很简单.看看我包括的教程,我确定代码将使点击.如果您确保不通过表单发送不需要的信息,并且客户端无法操作表单发送到多个电子邮件,那么您几乎是安全的.

我刚刚把这个写在我头顶上,所以如果令人困惑的话只是提出一些更多的问题或给我一个消息.祝你好运!

@H_403_35@ 原文链接:https://www.f2er.com/php/131465.html

猜你在找的PHP相关文章