【发布时间】:2016-11-05 15:28:07
【问题描述】:
我的页面上有按钮调用 JS 函数:
<button onclick="addProduct(100100)" type="button">Add</button>
(我这样做是因为我在同一页面上有多个订单)
JS函数addProduct(ordernum)获取订单号并提交ajax请求将数据处理到我的数据库中。
PHP
$sql = "INSERT INTO orders ( ... ) VALUES ( ... ) WHERE sku = :sku AND ordernum = $_POST['ordernum']";
$statement = $this->con->prepare($sql);
$statement->bindParam(':sku', $_GET['sku']);
$statement->execute();
在上面的代码中,我在$_GET['sku'] 变量上使用了bindParam() 来转义可以很容易地注入到url 中的特殊字符(正如你应该这样做的那样)。
但是我没有对$_POST['ordernum'] 做同样的事情,因为该值存储在 DOM 中并且无法修改。或者可以吗?那是我的问题。可以修改 DOM 上的信息以进行恶意攻击吗?
显然,为了安全起见,我可以使用 bindParam() 转义特殊字符,但攻击者能否更改我在 DOM 上的参数值?
【问题讨论】:
-
是的,绝对可以。任何来自浏览器的东西都不能被信任。
-
HTTP 请求可能是恶意的。假设所有输入都是危险的,直到你彻底清理它。
-
谢谢!我必须找到另一种方法来存储表示 DOM 上每个订单的订单号变量。我现在能想到的唯一方法是创建一个表单并包含隐藏的输入。
标签: javascript php html security dom