【问题标题】:Disable injection [duplicate]禁用注入[重复]
【发布时间】:2012-12-18 22:39:00
【问题描述】:

可能重复:
How to properly escape html form input default values in php?

我目前正在使用:

if (isset($_GET['b']))
{
  $bb = $_GET['b'];
  echo 'found';
}
else
{
  $bb = 'white';
  echo 'notfound';
}

<body bgcolor="<?php echo $bb; ?>">

要允许用户设置页面的颜色,避免注入最安全的方法是什么?

【问题讨论】:

  • 长袖衬衫可能不错。或者一套盔甲。但是我怀疑你不是在谈论那些类型的注射 - 小心扩展你的真正意思?
  • 人们将能够注入 javascript 文件以从文本字段中窃取数据,整个页面的重点是让用户可以在他们的网站上使用 iframe 并相应地设置背景
  • @NanashiDri 我很高兴有人这么说。你可以“避免”任何你想要的东西,但我总是可以打开我的检查器并在客户端更改任何东西。这是你无法控制的。
  • @user1841964 - 贝蒂福特诊所 - 但为什么有人要窃取他们自己的输入字段。也许是健忘症。

标签: php html css


【解决方案1】:

假设您期望一种颜色,您可以使用正则表达式来表示十六进制颜色:

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

以及 17 种标准颜色的列表:浅绿色、黑色、蓝色、紫红色、灰色、灰色、绿色、石灰、栗色、海军蓝、橄榄色、紫色、红色、银色、蓝绿色、白色和黄色:

$standards = array(
    'aqua',
    'black',
    'blue',
    'fuchsia',
    'gray',
    'grey',
    'green',
    'lime',
    'maroon',
    'navy',
    'olive',
    'purple',
    'red',
    'silver',
    'teal',
    'white',
    'yellow'
);

if (in_array($bb, $standards) or preg_match('/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/', $bb)) {
    // valid
}

【讨论】:

    【解决方案2】:

    您始终可以验证 $bb 仅包含 a-zA-Z0-9,这将使其适用于单字颜色名称(例如 whiteblackgrey)以及十六进制颜色代码(没有领先的#)。 :)

    【讨论】:

    • 用户可以使用#zzzzzz。我们不想这样,对吧?
    • 不,显然如果他想确保只有有效的十六进制代码,他也必须检查这一点。然而,使用#zzzzzz 并没有什么坏处,而且如果用户真的想要它......好吧,他们会拥有它,只是它并不真正存在。 :)
    【解决方案3】:

    使用它来转义特殊字符和引号:

    <body bgcolor="<?php echo htmlspecialchars($bb, ENT_QUOTES); ?>">    
    

    【讨论】:

      【解决方案4】:

      这类正则表达式可以验证您的需求。你可以check it here

      // match ffffff & fff
      if (!preg_match('/^([a-fA-F0-9]{3}|[a-fA-F0-9]{6})$/i', $bb, $matches_bb2)) {
        $color = $bb;
      }
      
      // check other color
      preg_match('/[\w]+/i', $bb, $matches_bb);
      
      // not a valid string (means no space, no accent, etc ..)
      if (isset($matches_bb[0]) && $matches_bb[0] != $bb) {
        $bb = 'white';
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-28
        • 2012-10-25
        • 2012-08-26
        • 1970-01-01
        • 2012-11-04
        • 2011-11-24
        • 2022-01-18
        • 2017-05-19
        相关资源
        最近更新 更多