【问题标题】:Do I need to secure a form that is not connected to a database我是否需要保护未连接到数据库的表单
【发布时间】:2015-06-26 17:05:06
【问题描述】:

我已经阅读了有关 sql 注入等方面的安全问题。

我对输入字段中的安全漏洞不太熟悉。

我目前有一个接受输入的表单(通过正则表达式验证),例如电子邮件验证如下:

if(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(document.getElementById(idName).value)){
    return true;
}else{
    return false;
}

这些值没有连接到数据库,只在 php 脚本中使用。是否有任何我需要注意的安全漏洞?或者通过使用正则表达式验证,我可以安全地抵御漏洞?

非常感谢任何信息,

谢谢你, 铝

【问题讨论】:

  • 大多数源于用户输入的安全漏洞(全部?)来自以特定方式使用的未经处理的数据;如果不知道你打算在 PHP 中使用它做什么,就很难知道你面临什么漏洞。
  • 是的..即使页面没有与数据库一起使用,安全性也是 javascript 类型条目的一个问题。在接受输入时使用正则表达式和 htmlspecial 实体。同时清除您对页面的使用并根据需要处理安全问题。
  • 感谢您提供信息,@DevLakshman 我不熟悉诸如“清除您对页面的使用”之类的术语,您能详细说明一下吗?
  • 表示您想要的安全级别。这将取决于创建页面的用途或原因,例如为增加数量而创建的页面。的用户需要更高的安全性和更少的安全性。希望你明白了..

标签: php html regex security


【解决方案1】:

是的。如果您有兴趣在服务器端拥有有效的电子邮件(至少对您的正则表达式有效),您绝对不应该依赖通过 javascript 正则表达式进行客户端验证。想象一下有人将客户端代码更改为以下代码(只是数千个选项中的一个:)):

if(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(document.getElementById(idName).value)){
    return true;
}else{
    // CHANGED:
    return true;
}

一般来说,回答您的问题:我认为在几乎所有情况下,您在 php 代码中使用客户端发送的输入,您需要一种输入过滤/清理,但您无法真正概括此任务。这就是为什么没有普遍有效的 sanitize() 函数的原因,因为它始终取决于您如何使用服务器端的输入。

在您的情况下,一种方法可能是通过 php 针对相同的正则表达式再次验证输入,或者将 php 的 filter_var() 与 FILTER_VALIDATE_EMAIL 过滤器结合使用

更新

我又发现了一篇关于输入验证的非常好的文章,它对我帮助很大:Input validation

【讨论】:

  • 现在正在检查这些输入,因为人们正在编写每个输入,然后当他们单击表单的提交按钮时再次检查。我在另一个 php 文件中使用 javascript,该文件在输入更改时调用(使用 onchange 函数),然后 onsubmit 函数在单击提交按钮时再次检查...从客户端和后端的角度来看,这不是我需要的全部吗?
  • 好吧,只要我明白你没有在服务器端验证你的输入(通过 PHP),听起来你在混淆客户端和服务器端,但请告诉我什么时候错了.您是仅在 javascript 中实现验证还是在服务器端有某些东西(= PHP 代码)。无论您通过 javascript 验证多少次,因为用户可以替换整个 javascript,或者更轻松地删除它
  • 目前我正在尝试完成的工作仍在制作中,而不是在线。但据我了解,由于可以替换/删除 javascript,我还必须仅通过保护服务器端的 PHP 代码创建相同的检查。所以只是客户端的javascript和服务器端证券的php。因此,如果有人要更改 javascript 或删除,我应该在我的 php 中进行相同的检查。
猜你喜欢
  • 2013-03-14
  • 2011-11-05
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 2016-10-08
相关资源
最近更新 更多