Strona 1 z 1
Zabezpieczenie systemu komentarzy.
Napisane: poniedziałek, 20 czerwca 2016, 21:45
przez tymek
Napisałem swój własny system komentarzy oparty o
ajax ($post), php oraz PDO. Zastanawiam się jak zabezpieczyć te komentarze. Ajaxa zabezpieczyłem tokenem, który się zmienia przy każdym odświeżeniu strony i jest ściśle powiązany z danymi które wysyłam przez POST, oraz userem który w tej chwili pisze komentarz(wysłanie linku z gotowym formularzem zakończy się fiaskiem). Każda zmiana istotnych danych kończy się przerwaniem - exit(). Do wysłania do bazy danych użyłem PDO i funkcji prepare(). Zastanawiam się jeszcze tylko nad samym komentarzem, probowałem zabezpieczyć to np tak:
Code: Zaznacz cały
trim(strip_tags(mysql_real_escape_string($string)));
Jest jednak mały problem, ponieważ funkcja mysql_real_escape_string zaznacza mi wszystkie znaki typu entery i zamienia na jakieś swoje odpowiedniki "/n". Przez co komentarz się 'psuje'.
Próbowałem również napisać odpowiedni kod za pomocą funkcji preg np.
Code: Zaznacz cały
(preg_match('@^([a-z0-9\!\@\#\$\%\^\&\*\?\(\)\-\_\-\+\,\.\"\'\[\]]+)$@iu', $intiger ))
Jednak coś mi się wydaje że zwłaszcza z tymi cudzysłowami to nie zadziała.
Co mógłbym zrobić?
I pytanie nr 2 muszę jakoś zabezpieczyć komentarz przed wysłaniem go ajaxem? Jeżeli tak to jakich funkcji użyć w javascript?
Re: Zabezpieczenie systemu komentarzy.
Napisane: poniedziałek, 20 czerwca 2016, 22:24
przez Morfidon
Pytanie nr 1:
Spróbuj wyciągnąć tak:
http://php.net/manual/en/function.stripslashes.php
Jak nie zadziała to możesz zakodować np. jsonem albo base64 komentarz do bazy danych i wyciągnąć go później i rozpakować.
Pytane nr 2:
Cokolwiek co wrzucasz do bazy lub wyciągasz powinieneś zabezpieczyć albo prepared statementami, albo mysqli_real_escape_string etc.
Re: Zabezpieczenie systemu komentarzy.
Napisane: poniedziałek, 20 czerwca 2016, 22:41
przez tymek
No tak, ale to w bazie mam mieć ten komentarz z tymi slashami? Sprawdzałem gdzie indziej w cmsach (Wordpress) nie mieli takich zabezpieczeń. Znaczy się nigdzie nie zauważyłem krzaczków w bazie. Jest sens zabezpieczać entery i cudzysłowia skoro wysyłam to PDO z funkcją prepare?
Co do pytania nr 2. Wiem że do bazy cokolwiek wysyłam muszę zabezpieczyć, ale tam mi chodziło o wysłanie danych przez ajax, czy to może skutkowac jakimś niebezpieczeństwem: )
Re: Zabezpieczenie systemu komentarzy.
Napisane: poniedziałek, 20 czerwca 2016, 22:50
przez Morfidon
1. Ogólnie to jest trudne, ale chodzi oto, że jak ktoś się dorwie do wpisu, który ma coś dziwnego i da radę zadać do niego zapytanie to wtedy się robią problemy. Jak reszta skryptów jest ok to teoretycznie jest bezpiecznie. Ważne jest to, by również sprawdzać to co wyciągasz z bazy.
2. Przecież jak wysyłasz przez ajax to wysyłasz najpierw do skryptu php info, a później z php wysyłasz do bazy danych?
Re: Zabezpieczenie systemu komentarzy.
Napisane: poniedziałek, 20 czerwca 2016, 22:56
przez tymek
Tak zgadza się pierw wysyłam do innego pliku php.
Zależy mi by mieć czystą bazę, a nie jeszcze kombinować i przekonwertowywać tekst. Później będę chciał gdzieś to przenieść, albo zmienić system komentarzy i znowu problem. W sumie tych dziwnych sleshy przy każdym enterze,innym białym znaku i cudzysłowie można by się pozbyć jeżeli usuniemy mozliwość wpisywania takich znaków specjalnych w cudzysłowach? Dobrze myśle?
Re: Zabezpieczenie systemu komentarzy.
Napisane: poniedziałek, 20 czerwca 2016, 23:18
przez tymek
HA! I mam rozwiązanie. Znaczy się ciekawy trop

wiem czemu tak się dzieje ze zapisuje mi w bazie z tymi sleshami. Ponieważ wcześniej mój kod zapisywałem zwykłymi zapytaniami mysql. Wtedy jak używałem funkcji mysql_real_escape_string wsztsko było cacy. Gdy jednak przepuścilem to przez PDO. On po prostu zapsiał sobie te znaki. Widać wyraźnie że ta funkcja nie powinna być stosowana przez PDO i w zupełnosci powinna nam wystarczyć do tego celu stworzona funckja prepare:PDO gdzies czytałem że przydatne jest $pdo->quote, ale z tego co siię dowiaduje tutaj
https://openclassrooms.com/forum/sujet/ ... ring-19722 chyba nie koniecznie potrzebna, jeżeli użyjemy prepare : )
Dobrze myśle?
Na wszelki wypadek napiszę preg_replace który usunie wszytskei znaki typu =, ||, !, między cudzysłowami.
Re: Zabezpieczenie systemu komentarzy.
Napisane: poniedziałek, 20 czerwca 2016, 23:25
przez Morfidon
Możesz tak zrobić. Albo po prostu przy wyciąganiu z bazy używasz strip_slashes, albo kodujesz jakimś koderem tekst wpisywany do bazy.