我正在使用PHP
有两个脚本。为了让第二个脚本知道第一个脚本分配的值,我使用的POST方法包含以下代码:
foreach (${"_".$_SERVER["REQUEST_METHOD"]} as $k => $v) $$k = $v;
检索POST(或GET)关联数组的每个(key => value)元素,并使用这些名称和值创建变量。
我不记得我在哪里找到了这段代码,但是一旦我弄清楚它是如何完成它的,我对它印象深刻。
它运作良好,但我知道如果我在几个月内回到它,我将不记得它是如何工作的,除非我添加广泛的评论,我更喜欢使用我可以立即理解和适合的东西以及我的非惯用风格。
有人有任何建议吗?
结论:
我喜欢extract()的想法,我可能会使用它。谢谢你们。
我应该解释一下为什么以下答案中提出的一些观点不会打扰我:
但我不应该让自己开始......
答案 0 :(得分:4)
这样做是一种潜在的安全风险,因为攻击者可以轻松更改其他变量。
您是否考虑过使用$_REQUEST
超全球?
答案 1 :(得分:3)
extract($_POST);
or
extract($_GET);
答案 2 :(得分:3)
提取请求变量不是安全方面的最佳实践,至少可以说......
考虑到这一点,这里有一些代码:<?php
// $req = ${"_".$_SERVER["REQUEST_METHOD"]}
if ($_SERVER["REQUEST_METHOD"] == 'GET') {
$req = $_GET;
else {
$req = $_POST;
}
extract($req);
?>
或简单地说:
<?php
extract($_REQUEST);
?>
请查看extract的文档页面,您可以添加有助于最大程度降低安全风险的额外选项。
答案 3 :(得分:0)
是的,这样做的惯用方法较少。您可以从php.ini启用“register_globals”设置。
然而,在你做之前,请确保你谷歌“php register_globals安全”,以获得一个暗示,为什么它可能不是一个如此出色的想法。
答案 4 :(得分:0)
一般来说,依靠以这种方式发送给你的东西并不好。 A正如其他人所建议的那样,如果这是你想要的方式,请使用extract(),但我会建议:
作为表单的每个脚本都应该包含它接受的字段列表:
$fields = array('name', 'age', 'city');
然后做:
$form = array();
foreach ($fields as $field) {
$form[$field] = $_POST[$field];
}
如果您只是根据客户端决定发送给您的内容创建全局变量,您可能会无意中覆盖您希望存在的内容,但会被客户端的任意值替换。这可能会造成漏洞。只接受你期望的东西是一种更安全的做法。