Czy jest tam, aby ciąg znaków javascript był przekazywany do NodeJS przyjaznego dla MySQL? Próbuję przekazać adres e-mail do mojego serwera NodeJS i wysłać zapytanie do bazy danych MySQL. Robiąc zwykły tekst, taki jak nazwa użytkownika, działa dobrze, ale adres e-mail nie działa. Używanie ewakuacji wyraźnie nie jest właściwą odpowiedzią, ponieważ nie jest przeznaczone do wstawiania SQL. Zakładam, że potrzebuję czegoś na linii funkcji PHP mysql_real_escape_string()
.Tworzenie javascript string sql friendly
Odpowiedz
Okazuje się, że mysql_real_escape_string() jest dość trywialne. According to the documentation:
.mysql_real_escape_string() wywołuje funkcję biblioteki MySQL mysql_real_escape_string, która poprzedza backslashy do następujących znaków: \ x00 \ n, \ r, \”" i \ X1A
Brzmi dość proste, w rzeczywistości mógłby zrobić coś takiego:.
function mysql_real_escape_string (str) {
return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) {
switch (char) {
case "\0":
return "\\0";
case "\x08":
return "\\b";
case "\x09":
return "\\t";
case "\x1a":
return "\\z";
case "\n":
return "\\n";
case "\r":
return "\\r";
case "\"":
case "'":
case "\\":
case "%":
return "\\"+char; // prepends a backslash to backslash, percent,
// and double/single quotes
}
});
}
UWAGA: nie mam uruchomić ten wszelkimi s test jednostkowy lub test bezpieczeństwa, ale wydaje się, że działa - i, tak jak dodatkowy bonus, wymyka się z kart, spacji i "%", więc może być również używany w zapytaniach LIKE, zgodnie z OWASP's recommendations (w przeciwieństwie do Oryginał PHP).
Wiem, że mysql_real_escape_string()
jest świadomy zestawu znaków, ale nie jestem pewien, jakie korzyści dodać.
Istnieje dobra dyskusja na te tematy: over here.
To całkiem niesamowite @Paul To faktycznie działało. – Bobby
@Bobby Cóż, jestem zaskoczony jak ty! Mam nadzieję, że jest bezpieczna we wszystkich sytuacjach :-) –
@Bobby Nie zapomnij o emotkach, które mogą powodować błąd. coś 'var m = m.replace (/ ([\ uE000- \ uF8FF] | \ uD83C [\ uDF00- \ uDFFF] | \ uD83D [\ uDC00- \ uDDFF])/g ');' może zostać dodany – zipp
W przypadku gdy ktoś szuka, ten escapeString() w CUBRID RDBMS działa następująco:
var _escapeString = function (val) {
val = val.replace(/[\0\n\r\b\t\\'"\x1a]/g, function (s) {
switch (s) {
case "\0":
return "\\0";
case "\n":
return "\\n";
case "\r":
return "\\r";
case "\b":
return "\\b";
case "\t":
return "\\t";
case "\x1a":
return "\\Z";
case "'":
return "''";
case '"':
return '""';
default:
return "\\" + s;
}
});
return val;
};
Jest to fragment CUBRID Node.js driver.
Jeśli grasz ze znakami CJK http://en.wikipedia.org/wiki/CJK_characters lub niektórych specjalnych ikon emocjonalnych iOS/Android/Inne ... telefonów komórkowych, takich jak "‡ ‰ ™ ©" lub decodeURIComponent ("\ XF3 \ xBE \ XAD \ xA0") .
Musisz ustawić my.cnf jak ten
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
skip-character-set-client-handshake
Używanie tablic zamiast oświadczenie koperty:
var regex = new RegExp(/[\0\x08\x09\x1a\n\r"'\\\%]/g)
var escaper = function escaper(char){
var m = ['\\0', '\\x08', '\\x09', '\\x1a', '\\n', '\\r', "'", '"', "\\", '\\\\', "%"];
var r = ['\\\\0', '\\\\b', '\\\\t', '\\\\z', '\\\\n', '\\\\r', "''", '""', '\\\\', '\\\\\\\\', '\\%'];
return r[m.indexOf(char)];
};
//Implementation
"Some Crazy String that Needs Escaping".replace(regex, escaper);
Pomyślałem było kilka prostych sposobów, aby to zrobić niż switch w mojej odpowiedzi podejrzewam, że to bardziej efektywne niż ja też, ale oczywiście nie robiłem porównania do zobacz dzięki za przyczynienie się do alternatywnego podejścia –
Łatwiej jest zamienić dwa w przypadku konieczności pójścia w drugą stronę zamiast konieczności pisania innego zestawu instrukcji case.Myślę, że jest również bardziej funkcjonalny i bardziej w duch Javascript. Najprawdopodobniej można by go znacznie poprawić. – Justin
nauczkę, że przechodząc numerów do tej funkcji powoduje, że całość proces jest używany do umrzeć po cichu. Więc dodam mały test:
function mysql_real_escape_string (str) {
if (typeof str != 'string')
return str;
return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) {
switch (char) {
case "\0":
return "\\0";
case "\x08":
return "\\b";
case "\x09":
return "\\t";
case "\x1a":
return "\\z";
case "\n":
return "\\n";
case "\r":
return "\\r";
case "\"":
case "'":
case "\\":
case "%":
return "\\"+char; // prepends a backslash to backslash, percent,
// and double/single quotes
}
});
}
To jest naprawdę dobre dodatek do zaakceptowanej odpowiedzi. Dzięki. – Dave
- 1. T-SQL String Wymień
- 2. Asp.net MVC SEO Friendly URL
- 3. Friendly ID i poręcze Silniki
- 4. SEO friendly URL w Yii
- 5. JavaScript Float + Float = String?
- 6. Obsługa wyjątków typu "catch-all friendly"
- 7. Szyny 4 friendly Id Slug nie aktualizowanie
- 8. SQL Case Sensitive String Porównaj
- 9. Javascript Concateenate Array to String
- 10. JavaScript konwertować int na string
- 11. Tworzenie instancji klasy na podstawie className: string
- 12. tworzenie tablic obiektów w javascript
- 13. Tworzenie widoku SQL z parametrami
- 14. Tworzenie tymczasowych tabel w SQL
- 15. TWORZENIE INDEKSU SQL Server 2008
- 16. Tworzenie linków klikalnych w JavaScript?
- 17. C# 2008 SQL Server Express Connection String
- 18. Usuń numery z serwera sql string
- 19. Maska US numer telefonu string z JavaScript
- 20. Znalezienie string-klucz w JavaScript tablicy
- 21. Konwertuj string na czas JavaScript (h: m)
- 22. Konwersja Ilość STRING (Kodowanie Dostarczany) JavaScript
- 23. Escape string JavaScript w widoku Play 2.0?
- 24. JavaScript - tworzenie elementów i ustawianie atrybutów
- 25. Emulacja SQL LIKE w JavaScript
- 26. Konstruktor zapytań SQL Javascript UI
- 27. Tworzenie kolumny obliczeniowej w SQL Server 2008
- 28. Tworzenie warunkowego wyzwalacza SQL w SQLite
- 29. Ekran powitalny ios fade out (iphone 5 friendly)
- 30. Przekierowanie ze starej domeny na nową (SEO friendly)
Trzeba coś wzdłuż linii odkażania wejście i wtedy coś na wzór właściwej biblioteki mysql, który pozwala przechodzić w par klucz/wartość do funkcji insert – Raynos
jestem przy użyciu biblioteki NodeJS MySQL, która działa dobrze. Jak powinienem to właściwie oczyścić? – Bobby
Uruchom na nim wyrażenie regexp, jeś li zawiedzie, wyś lij komunikat o błĘ ... dach do klienta. – Raynos