使用extract($_POST)
不安全? 如果是,那么我该怎么处理这件事?
Answer 1:
是的。 这是register_globals的是同样的事情。 这意味着,如果有人注射名为“MY_NAME”变量“MY_NAME”的值会存在。 如果它存在,它可以把一些垃圾或安全问题,在你的脚本,如果某处使用变量$my_name
Answer 2:
从PHP文件:
不要使用提取物()就不可信数据,如用户输入(即$ _GET,$ _FILES等)。 如果你这样做,例如,如果你想运行旧的代码,暂时依靠register_globals的,请确保您使用非覆盖extract_type参数值,如EXTR_SKIP之一,要知道,你应该是在是variables_order定义中的相同顺序提取在php.ini。
建议的做法是使用$_POST[<varname>]
直接,让您的网站的用户不能设置变量,应该是“安全”
Answer 3:
是的,它是不安全的。 任何一个可以覆盖本地变量(例如$password
或$access_level
)。
我推荐申报和这样分配自己的局部变量:
$var1 = isset($_POST['field_1'])?$_POST['field_1']:null;
$var2 = isset($_POST['field_2'])?$_POST['field_2']:null;
$var3 = isset($_POST['field_3'])?$_POST['field_3']:null;
Answer 4:
使用extract($_POST)
是不安全的,因为其他人说。 你问你可以做有关使什么extract($_POST)
的安全,特别是为了避免不断地引用$_POST
阵列。
的字面解释
你问到使用extract($_POST)
安全。 这是有点安全的,因为你的脚本的第一行使用,之前的任何局部变量已经被定义,与EXTR_PREFIX_ALL
和前缀。 在这两种情况下,然而,你是一个有风险的赌博,你将永远不会意外地通过错字在变量范围引入安全漏洞的任何地方 。 全球范围极其难以核实。 因为所有的程序员做错别字和不便是最小的,大多数程序员大力鼓励从未extract()
荷兰国际集团不可信的内容,无论范围有限,前缀等。
正确答案
$_POST
ED数据是不可信的和不安全的。 你永远不知道它可能包含 - 或者如果它甚至会被设定。 它是想有用的$_POST
作为其分配到一个局部变量之前必须“干净”的“污点”的数据。 因此,你应该能减少你的“的打字$_POST
通过验证,你把它分配给本地变量输入”。 PHP 5.2及以上使这更容易与filter_input()
和filter_var()
函数与审定过滤器。
顺便说一句,你应该始终验证输入和净化你的输出。 如果改为净化你的投入,你会遇到的问题在不同的上下文中显示它们(即,非HTML记录器,打印到终端)。 如果你不清理你的输出,你碰上XSS,SQL注入等。
拇指按这种心态鼓励的规则是把从另一个你不控制为进入你的系统的所有数据“污点”,不值得信任 - 你可能不控制系统中运行的Web浏览器,除非局域网发展。 此外,“纵深防御”鼓励治疗更值得信赖的系统,compromisable(它发生),使这个最普遍的最佳做法程序员。
Answer 5:
它始终是更好只需读取值$_POST
和做一些与他们,而不是仅仅把它们作为变量,冒着重写一些你的...