Destructive action
highContextual risklow confidenceThe shared read-only guard is a keyword blocklist that does not block SELECT ... INTO OUTFILE/DUMPFILE, so on MySQL a privileged user could write server-side files despite the read-only transaction.
/\b(insert|update|delete|drop|alter|create|replace|attach|detach|vacuum|pragma|reindex|truncate|grant|revoke|copy|merge|call|lock)\b/i
Counter-argument considered
The blocklist has no outfile, dumpfile or load_file term. sanitizeQuery only requires the query to start with select or with, and the MySQL driver sends it unchanged inside START TRANSACTION READ ONLY, which does not stop SELECT ... INTO OUTFILE. A form like `SELECT a INTO OUTFILE 'x' FROM t` survives the appended LIMIT. Exploitation needs the FILE privilege and a permissive secure_file_priv, so the risk is contextual and low, but no mitigation refutes it.