Php 如何保护我的代码

Php 如何保护我的代码,php,security,Php,Security,我正在为一家公司编写一个简单的基于web的网站,以便在其网站上显示产品。它需要相当容易维护。我不能使用数据库。我使用多维数组存储产品信息,并使用产品密钥检索它 我主要关心的是安全问题。我可以花在这件事上的时间非常有限,所以,我没有足够的带宽来做更严肃的事情。如果你看到任何明显不好的东西,请告诉我如何修补 以下是带有产品密钥的示例URL: 以下是获取产品密钥、验证其有效性并检索产品信息的代码: // obtain merchandise variables include 'merch.vars

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

我主要关心的是安全问题。我可以花在这件事上的时间非常有限,所以,我没有足够的带宽来做更严肃的事情。如果你看到任何明显不好的东西,请告诉我如何修补

以下是带有产品密钥的示例URL:

以下是获取产品密钥、验证其有效性并检索产品信息的代码:

// 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
    )
);

看起来您已经有了一个不错的方法来验证是否有人无法传入您的产品阵列中不存在的内容。也就是说,您关于从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将假设您使用的是常量。它将尝试查找常量的值,并假设您没有任何与这些名称匹配的常量,它将抛出一个通知并告诉您它假设您打算使用字符串。引用将使其性能更好,并且不会与使用这些键定义的任何常量发生冲突。

我认为您需要这样的内容:

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

你需要防御什么类型的攻击?例如,如果攻击者猜测某个网站没有告诉他们的产品的产品密钥,这是否是一个问题?您发布的代码中没有任何内容具有持久的效果,因此很难猜测哪些效果是可接受的,哪些是不需要的。如果没有数据库,很可能没有身份验证系统,我看不出有多少可能的漏洞……不过,您发布的这部分看起来“安全”。旁注:有多少种产品?你确定这种方法“相当容易维护”吗?你使用php数组。。。SQL注入和数据损坏是不可能的,只要包含数组的php文件仍然是Alivence catch David,尽管我一直喜欢单引号。我也喜欢单引号,但与OP的样式相匹配,因为所有值部分都使用双引号。