2012-12-13 8 views
5

Powiel możliwe:
Using stripslashes after mysql_real_escape_stringCzym są paski do paskowania?

Czytałem ostatnio o zapobieganiu SQL injection i staram się rozwijać pewne poczucie zrozumienia między różnymi funkcjami tak, że mogę się nauczyć podstawy.

Przeczytałem o mysql_real_escape_string i rozumiem, że jest to zasadniczo ucieczkowe znaki, które uważa za "specjalne", aby nie były mylone ze składnią SQL?

Teraz, zakładając, że jest co najmniej w pewnym stopniu prawdziwe - czy jest potrzeba użycia funkcji stripslashes w połączeniu z mysql_real_escape_string? Zastanawiam się, co to jest stripslashes i do czego służy.

+1

Ta funkcja jest nazywana ['stripslashes'] (http://php.net/manual/fr/function.stripslashes.php). I tak, przydatność 'mysql_real_escape_string' jest" prawdziwa ". I nie, nie powinieneś używać go z 'mysql_real_escape_string'. – zneak

+1

Tak, przepraszam, źle napisałem - dziękuję za wskazanie. – user1868565

+0

Nie mogę znaleźć funkcji 'striphashes' w dokumentacji PHP. Czy masz na myśli 'stripslashes'? Ponadto 'mysql_real_escape_string' jest używany do uniknięcia wszystkiego, co jest potencjalnie SQLiem w taki sposób, że nie jest już SQL. Scenariusz: otrzymujesz dane łańcucha od użytkownika; chcesz użyć tych danych w instrukcji SQL; użycie 'mysql_real_escape_string' zapewnia, że ​​użytkownik nie może wstawić SQL do swoich danych. Zapobieganie AKA, [SQL injection] (https://en.wikipedia.org/wiki/SQL_injection). –

Odpowiedz

11

Jeśli użyjesz stripslashes na wejściu zaraz po użyciu mysql_real_escape_string, skutecznie cofniesz to. Prawdopodobnie istnieją inne powody, aby używać stripslashes, ale w moim przypadku potrzebowałem tylko tego, aby cofnąć horror, który jest magicznym cytatem. Jest to właściwie przeciwieństwo addslashes.

addslashes robi niekoniecznie wejście ucieczki taka sama jak mysql_real_escape_string robi, i nie mogą być wykorzystywane do tego samego celu.

Jeszcze lepiej niż mysql_*, należy zapoznać się z wykorzystaniem przygotowanych oświadczeń, takich jak w PDO. Wtedy nie musisz się nawet martwić o mysql_* lub stripslashes (z wyjątkiem cytatów magicznych).

+0

Dzięki, myślę, że rozumiem to teraz, wybiorę jako odpowiedź, kiedy będę mógł. – user1868565

+0

Nie można się nauczyć zbyt wiele o [poprawnym wychwytywaniu SQL] (http://bobby-tables.com/php). – tadman

+0

Chciałbym zaznaczyć, że niektóre (wszystkie?) Implementacje 'mysql_real_escape_string' uciekają się do cytowań poprzez ich podwojenie:' mysql_real_escape_string ("nie") 'skutecznie zwraca' 'nie '", więc używając 'stripslashes' 'nie cofnie tego. Nadal nie jest wydajne wywoływanie 'stripslashes' na wyjściu' mysql_real_escape_string', chociaż; ale nie oczekuj, że przywróci twój ciąg do pierwotnego stanu. – zneak

3

Funkcja stripslashes() będzie usuwać znaki, które są znakowane ukośnikiem odwrotnym, \. Jest powszechnie używany w łańcuchach, które są usuwane poprzez addslashes() lub jeśli twoja konfiguracja PHP ma włączoną magic_quotes.

Podczas korzystania z funkcji wychodzących SQL, takich jak mysql_real_escape_string(), nie ma potrzeby korzystania z stripslashes(), ponieważ adapter MySQL będzie tylko wymykał się wartościom wstawionym do bazy danych - ukośniki nie pozostaną w rzeczywistych wartościach. Jeśli użyjesz stripslashes() dla zmiennej, która już została zmieniona przy pomocy mysql_real_escape_string(), usunie ukośniki tak, jakby były uniknięte przy użyciu addslashes() - raczej bezcelowe.

Jeśli Twoim celem jest zapobieganie iniekcji SQL, zdecydowanie polecam przeanalizowanie MySQLi lub PDO w przeciwieństwie do starszych metod mysql_. Zarówno MySQLi, jak i PDO oferują gotowe instrukcje, które, jeśli są właściwie stosowane, zapobiegną iniekcji SQL bez potrzeby zapamiętywania wywoływania specjalnych funkcji wychodzących lub niepokojących, czy twoje dane zostaną z nich zmodyfikowane.

-1

stripslashes funkcja służy do Un-quotes a quoted string

Przykład:

<?php 
echo stripslashes("how\'s going on?"); 
?> 

Wyjście kodu powyżej wynosi:

how's going on? 

Szczegółowe informacje:

http://php.net/manual/en/function.stripslashes.php

+1

Stripslashes nie wypisuje cytowanego ciągu znaków. To brzmi dość źle w moich uszach. Również twój przykład nie jest zbyt przydatny. – hakre

+0

@hakre, aby być uczciwym, to jest dokładnie tak, jak opisano w podręczniku PHP ... – Martin

+0

@Martin: Masz rację, w 2012 roku moje rozumienie cytowania było najprawdopodobniej ograniczone, angielski nie jest moim pierwszym językiem. – hakre

0

Wyjazd

http://php.net/manual/en/language.types.string.php
http://php.net/manual/en/function.stripslashes.php
http://php.net/manual/en/mysqli.real-escape-string.php

Funkcje escape dodać ukośników „\” uciec znaków, które mogą zostać wykorzystane do rozwiązania ważnych ciągów zapytań (nie samo zapytanie), aby zapobiec zastrzyk. funkcja stripslashes służy do usuwania tych ukośników, jednak nie ma żadnego praktycznego zastosowania dla nich w budowaniu ciągów zapytań, ponieważ usuwają potrzebne ukośniki.

Wyniki z MySQL nie są "przycięte" (uciekł), więc paski nie są potrzebne, gdy mamy do czynienia z wynikami.

Powiązane problemy