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


Can the DOM be modified for SQL injection attacks or other malicious attacks?

我的页面上有一个调用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上更改我的参数值吗?

您还需要参数化,因为有人可能不使用您的表单发布到您的页面

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

对系统的请求是一个简单的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或header值)。

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