簡體   English   中英

在Ruby字符串中轉義',不轉義\\插入MySQL

[英]Escaping ' in Ruby string, without escaping \ for inserting to MySQL

我在Ruby中有一個字符串,格式為: "Henry's string"

我嘗試過的每個gsubtr都會給我類似"Henry\\\\'s string""Henry\\\\\\\\'s string"等形式。

這些都轉義了反斜杠,但給我留下了不轉義的單引號。

我試過了:

  • "Henry's string".gsub("'","\\\\\\\\'")具有不同數量的\\

  • "Henry's string".gsub(/'/) {|x| "\\\\\\\\#{x}"} "Henry's string".gsub(/'/) {|x| "\\\\\\\\#{x}"}再次以不同數量的\\

  • "Henry's string".gsub(/'/) {|x| "\\\\#{x}"}.gsub(/\\\\/) {|x| "#{x}"}

我想我需要一個奇數\\來完全轉義'(以便加載到MySQL),但是我不知道如何獲得它。

當插入數據庫(如MySQL)時,使用帶占位符值的預准備語句很重要。 我將其以粗體顯示,因為要理解它特別重要。 它所需要的只是一個小小的錯誤,並且您已經創建了一個SQL注入漏洞,任何人都可以利用,這可能會造成極大的破壞。

轉義字符串從表面上看似乎很簡單,但事實並非如此。 您需要掩蓋很多古怪的案例,這些細節過於復雜,以至於無法在簡短的答案中提及。

一個簡單的解決方案是根本不去轉義,而是編寫這種形式的查詢:

INSERT INTO table_name (column_name) VALUES (?)

在哪里? 代表您要插入的數據。 您可以將它們與mysql2驅動程序一起使用,例如:

stmt = @client.prepare("INSERT INTO table_name (column_name) VALUES (?)")
stmt.execute("Henry's string")

該驅動程序將在哪里正確編碼值,因此您不必擔心它。

您還可以使用SequelActiveRecord之類的東西來進一步簡化事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM