我们有网址:
http://site.com/index.php?action=show
Run Code Online (Sandbox Code Playgroud)
$_GET['action']在模板中用于检查以下值?action=:
switch ($_GET['action']) {
case = "show" {
$match_show = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在其他地方:
echo $_GET['action'];
Run Code Online (Sandbox Code Playgroud)
使用这种结构绝对安全吗?
如何使它们安全?
谢谢.
Pek*_*ica 12
切换的事情是可以的,因为你正在与硬编码值进行比较(但是,它是case "show":顺便说一下).
正如@Bruce在评论中提到的那样,你应该添加一个default:案例来捕获列表中没有的值或空值:
switch ($_GET['action']) {
case "show":
$match_show = true;
break;
default:
// value is not on the list. React accordingly.
echo "Unknown value for 'action'".
}
Run Code Online (Sandbox Code Playgroud)
第二件事是有潜在危险的,因为有可能将HTML注入文档主体,更重要的是注入JavaScript.您应该htmlspecialchars()在回显变量之前应用变量.
该$_GET超全局默认情况下不,因为它可能包含特殊或编码字符等不良文字序列是安全的.
您可以使用内置的PHP函数filter_input根据几个标准过滤器来清理字符串(请参阅过滤器列表以了解可能的内容).
例:
if (!($action = filter_input(INPUT_GET, 'action', FILTER_SANITIZE_STRING))) {
$action = 'some-default';
}
Run Code Online (Sandbox Code Playgroud)
好处:
依靠内置的清理过滤,确保:
缺点:
filter_input如果你修改超全局$_GET(你可能不应该这样做),就无法使用.边注
您还可以检查该字段是否为使用集合之一in_array,这是一种更动态的方法,用于检查您是否具有集合之一.
$search = in_array($search, array('show', 'hide')) ? $search : 'some-default';
Run Code Online (Sandbox Code Playgroud)
动态方法允许您安全地执行或查找目标操作,同时将数据结构中的潜在选项集存储在静态代码中.
| 归档时间: |
|
| 查看次数: |
16297 次 |
| 最近记录: |