从填充HTML选择框的安全角度来看哪个更好?
选项A:PHP
<?php echo "<select name=\"empName\" id=\"empName\" class=\"text\" style=\"width:10em;\">\r\n";?>
<?php include 'PHPscripts/getEmployeeNamesDB.php'?>
<?php echo "</select>\r\n";?>
getEmployeeNamesDB.php
$dropdown = "";
$tbl_name="employee"; // Table name
$result = mysql_query("SELECT CONCAT_WS(' ', firstname, lastname) AS 'wholename', empid FROM $tbl_name ORDER BY lastname") or die("cannot select result DB.php");
while($row = mysql_fetch_assoc($result)) {
$empid = $row["empid"];
$name = $row["wholename"];
$dropdown .= "<option value=\"$empid\">$name</option>\r\n";
}
echo $dropdown;
选项B:Javascript
相同的信息,除了使用AJAX调用来填充javascript变量。然后使用javascript制作select语句?
安全是我的主要关注点,但我也想知道你是否可以提出我应该考虑的任何其他问题。
答案 0 :(得分:2)
当您尝试填充或生成输出时,没有任何安全问题,除非涉及以前的用户输入。如果用户选择这样做,用户可以伪造POST请求并轻松包含您未包含在选择框中的选项。
因此,当用户提交您应该关注安全性的数据时。您应该在收到数据后始终验证数据,看它是否是有效选项。例如:
<?php
// Generating the menu
$choices = array('Eggs','Toast','Coffee');
echo "<select name='food'>";
foreach ($choices as $choice) {
echo "<option>$choice</option>";
}
echo "</select>";
// Then, later, validate when user submits form
if (! in_array($_POST['food'], $choices)) {
echo "You must select a valid choice.";
}
?>
正如其他人已经注意到的那样,你应该使用PHP而不是JS,因为它可以更快,也适用于那些关闭JS的人。
答案 1 :(得分:0)
在安全方面,它们是相同的。使用ajax可能更容易设计。
答案 2 :(得分:0)
我在这里看到的唯一安全因素是,如果你使用AJAX路由,你还需要再处理一层。使用PHP,它纯粹是服务器脚本之间的通信。使用AJAX,您可以通过网络从最终用户浏览器进行通信,这可以是任何内容。根据JS构建查询的方式,该用户可以根据需要使用您的JS并补充查询。
答案 3 :(得分:0)
安全性没有区别,但选项a会更快,更简单。它适用于关闭javascript的人。