PHP:为所有$ _GET&添加引号是个好主意。 $ _ POST?

时间:2016-03-08 21:11:44

标签: php

在Wordpress中,我注意到它们有一个名为const Vertex VerticesCube[] = { // Front {{1, -1, 1}, {1, 0, 0, 1}, {0, 1}, {0, 0, 1}}, {{1, 1, 1}, {0, 1, 0, 1}, {0, 2.0/3.0}, {0, 0, 1}}, {{-1, 1, 1}, {0, 0, 1, 1}, {1.0/3.0, 2.0/3.0}, {0, 0, 1}}, {{-1, -1, 1}, {0, 0, 0, 1}, {1.0/3.0, 1}, {0, 0, 1}}, }; const GLubyte IndicesTrianglesCube[] = { // Front 0, 1, 2, 2, 3, 0, } docs)的函数。

以下是一个例子:

wp_magic_quotes()

在我自己的代码中(与Wordpress分开),这样做有什么好处?有安全保障吗?

也许Wordpress这样做是因为他们的软件在很多环境中使用,他们需要使它们保持一致。

我的软件在单一环境中,我使用PDO连接为我的数据库已经转发数据。

我只是想弄清楚是否有任何好处来做这类事情。

2 个答案:

答案 0 :(得分:2)

全局变量的魔术引用通常是懒惰的安全性,并导致更糟糕的问题。我猜想WordPress会添加它们,因为它们不相信插件编写者可以对输入进行适当的卫生;或者他们有很多遗留代码需要打开magic_quotes。

处理来自用户的全局数组的输入的正确方法是尽可能紧密地过滤每个数组。所以,如果你有:

<select name="number">
  <option value="1">Thing 1</option>
  <option value="2">Thing 2</option>
  <option value="3">Thing 3</option>
</select>

您应该将其过滤为1到3之间的整数。

$_SAFE = array();
$_SAFE['number'] = filter_var($_POST['number'], FILTER_SANITIZE_NUMBER_INT);
if($_SAFE['number'] < 1 || $_SAFE['number'] > 3)
{
  //user is doing something evil, block them, and die.
}

然后,对可能的注射进行消毒,以防万一你早些时候错过了什么。对于SQL,它表示使用PDO或MySQLi将所有变量作为类型化参数传递的预准备语句。输出到浏览器意味着htmlentities()。

答案 1 :(得分:1)

从PHP 5.4.0开始删除了魔术引号。 http://php.net/manual/en/security.magicquotes.php解释了为什么并推荐了诸如mysql_real_escape_string之类的替代方法。只要正确完成,清理输入就是一个好主意。祝你好运!