如何保护我的代码

时间:2012-03-29 05:23:19

标签: php security

我正在为公司编写一个简单的基于网站的网站,以便在其网站上展示产品。它需要相当容易维护。我无法使用数据库。我正在使用多维数组来存储产品信息并使用产品密钥检索它。

我主要担心的是安全问题。我花在这上面的时间非常有限 - 所以,我没有足够的带宽来构建更严肃的东西。如果你看到任何看起来很糟糕的东西,请告诉我如何修补它。

以下是包含产品密钥的示例网址: http://example.com/products.php?productKey=widget

以下是获取产品密钥,验证产品密钥并检索产品信息的代码:

// obtain merchandise variables
include 'merch.vars.php';

// assign a default value
$productKey = 'placeholder';

// check to see if a value was passed
if (isset($_GET["productKey"])) {
    // create array of product keys
    $productArrayKeys = array_keys($product);

    // check if value passed to page exists in product key array
    if (in_array($_GET["productKey"], $productArrayKeys)) {
        // value exists - assign to $productKey
        $productKey = $_GET["productKey"];
    }
}

以下是产品多维数组的示例:

$product = array(
    "placeholder" => array(
        item_title => "Placeholder Title",
        item_image_url => "placeholder.png",
        item_price => "0.00",
        item_description => "Placeholder Description",
        item_quantity => 1,
        product_icons => false
    ),
    "widget" => array(
        item_title => "Product Title",
        item_image_url => "widget.png",
        item_price => "15.00",
        item_description => "Product Description",
        item_quantity => 1,
        item_category => array(
            small => "Small",
            medium => "Medium",
            large => "Large",
            Xlarge => "XLarge"
        ),
        product_icons => true
    )
);

2 个答案:

答案 0 :(得分:2)

看起来您已经有了一个不错的方法来验证某人无法传递您的产品阵列中不存在的内容。也就是说,您对它从products数组中检索信息的描述/注释并不完全有效。完成检查后,您需要具有类似

的内容
$chosenProduct = $product[$productKey];

以便真正获得产品信息。

还有一个程序问题,在你的$ product数组中,它真的应该引用你所有的键:

$product = array(
    "placeholder" => array(
        "item_title" => "Placeholder Title",
        "item_image_url" => "placeholder.png",
        "item_price" => "0.00",
        "item_description" => "Placeholder Description",
        "item_quantity" => 1,
        "product_icons" => false
    ),
    "widget" => array(
        "item_title" => "Product Title",
        "item_image_url" => "widget.png",
        "item_price" => "15.00",
        "item_description" => "Product Description",
        "item_quantity" => 1,
        "item_category" => array(
            "small" => "Small",
            "medium" => "Medium",
            "large" => "Large",
            "Xlarge" => "XLarge"
        ),
        "product_icons" => true
    )
);

在没有引用的情况下,PHP会假设您正在使用常量。它将尝试查找常量的值,并假设您没有任何与这些名称匹配的常量,将发出通知并告诉您它假设您打算使用字符串。引用将使其表现更好,并且不会与任何可能已使用任何这些键定义的常量冲突。

答案 1 :(得分:0)

我想你想要这样的东西:

if (isset($_GET["productKey"]) && isset($product[$_GET['productKey']])) {
    $productKey = $_GET["productKey"];
    print_r($product[$productKey]);
}else{
    echo 'product does not exits / productKey not set';
}