考虑以下一对片段,两者都基本相同。
<html>
<body>
<?php
if(isset($_POST["firstName"]) && isset($_POST["lastName"])){
//I'm copying the POST variable to a local one.
$firstName = $_POST["firstName"];
$lastName = $_POST["lastName"];
echo "<h1>Thank you for taking the census!</h1>";
echo "On behalf of Sergio's Emporium, we name you: " . $firstName . $lastName . ", conquerer of worlds!";
//Here I'm just pulling it from the POST info.
echo "I think that's fitting since you're a " . $_POST["item"];
}
else {
echo "You didn't write in the necesarry information.";
}
?>
</body>
</html>
哪个更好(从安全角度来看),鼓励哪一个被标准使用。
因为我是PHP的新手,所以这就是我的链条。多谢你们! :)
答案 0 :(得分:7)
我想说,只要你做得恰当,这两个解决方案都不会从安全的角度改变任何东西:
在这里,当您输出一些HTML时,例如,使用htmlspecialchars
转义数据可能很有用; - )
为了促进这一点,有些人喜欢考虑:
$_POST
包含原始输入答案 1 :(得分:-1)
我相信你应该因为你应该对post vars进行某种消毒然后分配给一个本地var
答案 2 :(得分:-1)
根据谷歌的表现大师的说法,应该尽可能避免PHP变量复制:http://code.google.com/speed/articles/optimizing-php.html
就个人而言,我喜欢它,因为我可以在脚本的顶部清楚地看到脚本期望从请求中获得哪些变量,所以我曾经在顶部写下$_REQUEST
和朋友的副本:
<?php
$req_param1 = $_REQUEST['param1'];
...
if (isset($req_param1)) {
...
}
...
如今,我做得与众不同。我通常使用define()
或在类const
中定义我希望从请求中获取的参数的名称。然后,我可以在代码中搜索那些,以查看我实际上在哪里取消它们:
define('REQ_PARAM1', 'param1');
...
function foo(){
if (isset($_REQUEST[REQ_PARAM1])){
...
}
...
}
类的例子:
class MyClass {
const REQ_PARAM1 = "param1";
...
function foo(){
if (isset($_REQUEST[MyClass::REQ_PARAM1])){
...
}
}
}