PHP数据验证/输入安全性

时间:2015-11-28 06:18:30

标签: php mysql

我正在努力在系统投入使用之前提高其系统的安全性。所以即时添加一个函数来验证输入数据。 我在w3c网站上找到了这个,因为我做了一些研究最好的方法。

<script language="JavaScript">
   function ChangeText1() { 
      $("#ajax_content").load("zone_code.php?zone=1 #zone_code1");}
   function ChangeText2() {
      $("#ajax_content").load("zone_code.php?zone=2 #zone_code2");}
   function ChangeText3() {
      $("#ajax_content").load("zone_code.php?zone=3 #zone_code3");}
</script>

由于大多数东西都是数据库中的Safed,我还需要一个已经实现的MySql Escape。现在我想合并这个,我只是想知道我通过这些步骤的顺序。 function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } 首先确实有意义,但遵循这一点?我特别不确定abot trimstripslashes本身是一种逆转吗?

如果有更多经验的人可以为我照亮它,那就太好了!

编辑1:什么是数字输入 - 它是否足够&#39;用MySql Escape进行测试?

1 个答案:

答案 0 :(得分:1)

验证数据是正确的。但是,如果不知道数据的目的是什么,就不可能就如何验证数据提出建议。验证&amp;输入安全性是关于正确应用原则而不是修复所有潜在问题的任何一组特定代码。如果这很容易,那么SQL注入不会是OWASP top 10的顶部。

您必须做的是始终确保数据符合您的预期。例如,数字字段中的文本字符串可能会导致代码执行意外操作。 PHP有许多可用于验证的函数。 is_numericstrlenpreg_match - 正则表达式非常适合验证日期,邮政编码和许多其他输入。

我不确定您使用stripslashes的原因,尤其是在谈论数据库查询时。曾经常见的是addslashes正在使用中,以至于PHP有magicquotes在所有输入上自动addslashes。它值得一读those pages of the manual,因为它们涵盖了全面改变所有输入的问题。

要做的第二件事是决定如何处理与预期不符的输入。可能值得记录错误,以便您可以解决前端代码的任何问题。您是否要让用户知道输入存在问题?

最后想到你的问题,你问的是验证输入,但是stripslasheshtmlspecialchars都修改了输入。这可能会在以后产生问题,例如,如果您在某些用例中想要输入数据中的斜杠,或者输入是图像而不是文本。

对不同的输入类型进行不同的验证。保持编码/转义代码在需要时使用。例如。在使用xhtml输出中的数据之前插入db mysqli->real_escape_string之前htmlspecialchars

阅读问题,了解OWASP top 10,询问S.O.如果你在特定的输入场景中挣扎。应用课程并在现实世界中监控您的应用程序。不要只是假设它是安全的,你将在很大程度上避免痛苦和修复黑客攻击系统的尴尬。