是否可以针对SQL注入攻击或其他恶意攻击修改DOM?

时间:2016-07-04 00:34:33

标签: javascript php html security dom

我的页面上有按钮调用JS函数:

db:migrate:reset

(我这样做是因为我在同一页面上有多个订单)

JS函数<button onclick="addProduct(100100)" type="button">Add</button> 获取订单号并提交ajax请求以将数据处理到我的数据库中。

PHP

addProduct(ordernum)

在上面的代码中,我在$sql = "INSERT INTO orders ( ... ) VALUES ( ... ) WHERE sku = :sku AND ordernum = $_POST['ordernum']"; $statement = $this->con->prepare($sql); $statement->bindParam(':sku', $_GET['sku']); $statement->execute(); 变量上使用bindParam()来转义可以很容易地注入url的特殊字符(如你所愿)。

但是我没有对$_GET['sku']做同样的事情,因为该值存储在DOM上并且无法修改。或者可以吗?那是我的问题。您是否可以修改有关恶意攻击的DOM信息?

显然我可以使用$_POST['ordernum']来逃避特殊字符只是为了安全,但是攻击者是否可以更改DOM上参数的值?

2 个答案:

答案 0 :(得分:1)

您还需要对其进行参数化,因为有人可能会使用您的表单发布到您的网页。

答案 1 :(得分:0)

可以操纵存储在客户端的任何东西。

对您的系统的请求是一个简单的POST请求:

POST /somepage.php?sku=123 HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

ordernum=ABCDEF

任何攻击者都可以使用Burp Suite这样的简单工具来操作ordernum并实现SQL注入,因此您应该参数化所有动态参数(包括任何cookie或使用的标头值。)

当然,攻击者可以将ordernum更改为另一个有效订单并对其进行更改而不是正在编辑的订单。为了缓解这种情况,您应该验证服务器端当前用户是否有权编辑给定的ordernum