请记住:
>正在进行JavaScript验证
>没有数据库有问题,这是一个简单的电子邮件表单
<?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@客户端验证是毫无意义的,你只会浪费时间.客户端唯一的方法会让你有麻烦.你不能相信你的用户那么多.
如果您打算在实际环境中实际发布或真正使用它,则必须具有服务器端验证.这是非常值得的,因为这是一个简单的形式,但它可能会增长到更多.此外,如果您现在关心验证,则可以稍后再与应用程序/站点的其他组件一起使用它.如果您尝试思考可重用性的条款,您将节省您自己无数次的开发时间.
还有其他用户提到的注入和javaScript问题等明显问题.
另外,简单的人机识别技术也不再削减它了.有关CAPTCHA的一些不错的资源.
看看那些.
所以您的问题的简单答案是,您当前在当前情况下肯定是脆弱的.我知道更多的开发需要更多的时间,但如果您遵循良好的开发实践,如可重用性和正交/模块化设计,您可以节省大量的时间,仍然可以生产出强大的应用程序.
祝你好运!
更新:
您可以添加FILTER_VALIDATE_EMAIL来处理电子邮件验证,您可以在这里阅读有关电子邮件注入的更多信息以及如何处理:damonkohler.
对于CAPTCHA,它可以解决问题,但这真的取决于您的表单/网站的目标的价值.我建议使用非线性变换或广泛使用和证明的东西.如果你是自己写的,你可能会遇到麻烦.
概要:
>验证电子邮件
>仍然确保你从注射中保存
>确保CAPTCHA足够强大
>真的考虑服务器端验证
更新:
你有问题回答了吗?让我们知道一些事情不清楚.
祝你好运!
更新:
好的,我想我们在这个整个客户端/服务器端的失败让你有点困惑.我会尝试把它当成现在,这样做更有意义.第一部分解释了一些基本概念,第二部分回答了你的问题.
首先,PHP是服务器端语言.它在服务器上运行,当发送页面请求时,服务器将“运行”PHP脚本,对请求的页面进行任何更改,然后将其发送给正在请求页面的用户.用户没有访问/控制该PHP脚本.相反,如前所述,客户端脚本(如JavaScript)可以被操纵.但是,只是因为您有一些PHP脚本运行并检查表单上的某些内容,这并不意味着该表单是安全的.这只意味着您正在对表单进行一些服务器端处理.把它放在那里,使它安全是两个不同的东西,我相信你已经弄清楚了.
现在,当我们说你需要服务器端验证时,我们意味着你需要一个好的验证.此外,在这个忙碌的问答格式中,没有人真正提到验证数据和消毒数据之间有区别.
消毒 – 使数据符合一些标准
验证 – 检查数据是否符合标准
看看phpnightly更好的解释和例子.
还有一些很好的简单教程,描述如何创建表单的基本验证.
非常基本,但你应该得到这个想法.
那么你如何处理你目前的问题呢?
>首先,您应该保留您所拥有的内容或客户端验证,并按照您提到的方式添加人机识别系统(CAPTCHA)(请查看我的文章或您可以研究一些好的).
>你应该验证什么?
>检查数据是否符合您的预期:是否为空?是电子邮件吗?它包含数字吗?您可以在服务器端验证与在用户端验证的相同的数据.唯一的区别是客户端无法操纵该验证.
湾您也可以清理数据
使它小写并比较它,修剪它,甚至将它转换成一个类型,如果你需要.如果你有时间检查出来,那么PHPnighty的文章对这两个文章有一个很好的解释,而不用这两个.
>用户是否可以发送无效数据?
确保他们可以,但现在他们无法访问验证算法,他们不能只是禁用它或绕过它(严格来说)
>当数据无效或恶意时,只需通知用户发生错误并使其再次执行.这就是服务器端验证的要点,您可以阻止用户规避规则,并且可以提醒他们他们的输入无效
>也要小心错误信息;不要透露您用于验证用户的太多规则,只需通知他们您期望的内容
>此外,以上是否会阻止垃圾邮件?
如果您确保该表单不易受到电子邮件注入的攻击,您可以进行客户端验证,CAPTCHA和某些形式的服务器端验证(不必超级复杂),它将阻止垃圾邮件(请保留在我的今天伟大的解决方案明天不是那么好)
>为什么我需要这个服务器端的公牛*当我的客户端验证工作正常?*
认为它有一个安全网.如果垃圾邮件发送者绕过客户端安全,则服务器端的安全性仍然存在.
这个验证的东西听起来好像很多工作,但实际上很简单.看看我包括的教程,我确定代码将使点击.如果您确保不通过表单发送不需要的信息,并且客户端无法操作表单发送到多个电子邮件,那么您几乎是安全的.
我刚刚把这个写在我头顶上,所以如果令人困惑的话只是提出一些更多的问题或给我一个消息.祝你好运!
@H_403_35@ 原文链接:https://www.f2er.com/php/131465.html