我的页面上有按钮调用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上参数的值?
答案 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
。