1 回答

TA貢獻2039條經(jīng)驗 獲得超8個贊
首先,如果可以避免,切勿將日期直接插入 SQL 片段,即使您認為它們可能來自安全來源!
也就是說,查看生成的 SQL 查詢(如果您還沒有使用Debug Kit,則應該安裝它),您將值括在雙引號中,即生成的 SQL 將如下所示:
OrderProduct.actual_rate?*?"2"
在 ISO SQL 中,這意味著2
將用作標識符。
刪除引號可以解決問題,但是您仍然將動態(tài)數(shù)據(jù)注入到 SQL 字符串中,如果可能的話應該避免這種情況,因此您應該更進一步并綁定值,以減少創(chuàng)建 SQL 的機會注入漏洞:
// ...
->select([
? ? 'product_name' => 'MAX(Products.product_name)',
? ? 'count' => 'SUM(OrderProduct.qty)',?
? ? 'actual_rate' => 'SUM(OrderProduct.actual_rate)',
? ? 'revenue_based_actual_rate' => '(
? ? ? ? SUM(
? ? ? ? ? ? CASE
? ? ? ? ? ? WHEN PaymentMethods.payment_gateway = \'nicepay\'
? ? ? ? ? ? THEN (OrderProduct.actual_rate-((OrderProduct.actual_rate * :nicepayCommission)/100))
? ? ? ? ? ? WHEN PaymentMethods.payment_gateway = \'paypal\'
? ? ? ? ? ? THEN (OrderProduct.actual_rate-((OrderProduct.actual_rate * :paypalCommission)/100))
? ? ? ? ? ? ELSE (OrderProduct.actual_rate)
? ? ? ? ? ? END
? ? ? ? )
? ? )'
])
->bind(':nicepayCommission', $nicepay_commission, 'integer')
->bind(':paypalCommission', $paypal_commission, 'integer')
// ...
- 1 回答
- 0 關注
- 162 瀏覽
添加回答
舉報