有時我會從 Laravel 中得到以下例外:
"class": "Illuminate\\Database\\QueryException",
"message": "SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\\xC0\\xA7\\xC0\\xA2%2...' for column 'user_agent' at row 1 (SQL: update `sessions` set `payload` = testpayload, `last_activity` = 1663058232, `user_id` = ?, `ip_address` = ipAddress, `user_agent` = 1 ????%27%22 where `id` = blahblah)"
?根據我的閱讀,很可能是我的表格沒有使用正確的編碼,并且可能在查看該網站的人內部使用了一個特殊字符(類似于) user_agent,因此它會引發錯誤。
但是檢查一下,我假設如果我有默認的 Laravel 設定,其他人如何沒有遇到同樣的問題。檢查我的設定:
config/database.php
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
^ 并在資料庫本身中確認,這就是我正在使用的。
然后我懷疑當我從 Laravel 5.x > 7.x 升級時,遷移可能發生了變化或其他什么,我應該使用不同的字符集。但是檢查遷移以及版本 7 的db 配置,沒有任何改變。
Laravel 版本:7.30.4
mysql版本:5.7.33-log
有人以前見過這個或指出我正確的方向嗎?
uj5u.com熱心網友回復:
該垃圾字串不是合法的用戶代理;看起來它甚至不是有效的 UTF-8,而是某種超長編碼的轉義形式,這是無效的:
select convert(x'C0A7C0A2' using utf8);
(null)
同時,該%27%22部分是雙 URL 編碼版本,'"其中的 URL 編碼版本是"". 它也是垃圾。
您的示例中的請求可能來自一些試圖查找漏洞的機器人或滲透測驗工具,例如sqlmap,它可以使用這些技巧(here,here)來嘗試避免過濾器。它不是來自一個人。如果您有其他具有相同問題的請求,或者具有不同外觀的用戶代理,那么這些可能是同一工具的其他嘗試。
您可能只想完全阻止來自該 IP 的請求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/506719.html
