[PHP] BBCode parser dla PHP7 |
[PHP] BBCode parser dla PHP7 |
13.02.2018, 09:48:11
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 10.04.2012 Ostrzeżenie: (0%) |
Proszę o ocenę kodu pod względem optymalności oraz bezpieczeństwa. Parser miał być prosty i bezpieczny. Udało się cały kod zmieścić w 66 linijkach także dużo sprawdzania nie będzie ;-)
Tutaj znajduje się cały kod wraz z opisem: https://github.com/ToTamir/BBCode-Parser
Powód edycji: [nospor]: nie pozycjonuj sie tu
|
|
|
13.02.2018, 10:32:04
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
Pozwalanie na wrzucenie do bbcode do obrazka dowolnego url usuwa z tej klasy tag "bezpieczna"
Brak klas na elementach ktore generujesz uniemozliwia mi jakiekolwiek ostylowanie tego bbcode No i testowales w ogole to: $patterns[] = '/\r\n/'; ? Odnosze wrazenie ze nie powinno zadzialac. No i co z sytuacja gdy ktos bedzie mial poprostu tylko znacznik \n ? No i na koniec bbcode to juz raczej wypada z obiegu. Teraz bardziej przyjaznym dla uzytkownika jest Markdown -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.02.2018, 10:46:46
Post
#3
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 10.04.2012 Ostrzeżenie: (0%) |
Na co należałoby twoim zdaniem zwrócić uwagę przy filtrowaniu url dla obrazów?
To przejście do nowej lini działa poprawnie, a przypadek z samym znacznikiem \n uwzględnie w najbliższym czasie. |
|
|
13.02.2018, 11:12:38
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
I jeszcze sam kod:
niby piszesz pod php7 i niby funkcja ma zwracac tylko string, ale dajesz return preg_replace() Jakbys zajrzal do manuala to bys zobaczyl ze preg_replace moze tez zwrocic cos innego niz string a tym samym narazasz mnie, jako uzytkownika twojej aplikacji, na FATAL ERROR na stronie. nie array() a [] krotka notacja juz od dawna jest standardem no i nie $ar[] = .... $ar[] = ... a: $ar = [ ... ... ] ps: podobnie z preg_replace_callback ktore moze zwrocic nie string. Warto dbac o takie szczegoly w szczegolnosci ze okreslasz swoja funkcje mianem "bezpiecznej" -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.02.2018, 11:52:39
Post
#5
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 10.04.2012 Ostrzeżenie: (0%) |
Poprawiłem tablice oraz uwzględniłem same \n .Wygląda to obecnie tak:
Co do funkcji preg_replace() oraz preg_replace_callback() nie do końca się zgodzę. To prawda, że funkcje te mogą zwrócić inny typ danych, ale dzieje się tak tylko w przypadku błędu. Błąd może wystąpić tylko i wyłącznie w dwóch przypadkach: 1. zmienna przekazywana do tych funkcji jest innego typu niż array lub string, 2. pattern lub replacement są przekazane do funkcji z błędem. Możliwość pojawienia się błędu numer 2 została wyeliminowana przez sprawdzenie wyniku wykonania kodu, natomiast możliwość pojawienia się błędu numer 1 została wyeliminowana przez wymuszenie w funkcji typu string dla parametru $string. A więc jedyna możliwość pojawienia się FATAL ERROR pomijając przekroczenie pamięci czy czasu wykonywania to przekazanie do funkcji zmiennej innego typu niż string. Jeżeli "programista" nie sprawdza typów danych przed przekazywaniem ich do funkcji to raczej nie będzie to jedyny FATAL ERROR w jego programie. Chyba że się mylę? I dodatkowo drugi raz proszę o podpowiedź, na co zwrócić uwagę przy filtrowaniu url dla obrazów. |
|
|
13.02.2018, 12:06:51
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
Ale naprawde taki problem zamiast
return preg_replace($patterns, $replacements, $string); dac return (string)preg_replace($patterns, $replacements, $string); I juz kod jest zabezpieczony. Tobie sie teraz wydaje ze ten NULL nie wystapi nigdy, moze i slusznie, ale nie jestes w stanie przewidziec co sie stanie u kogos za rok. Ja po "paru" latach programowaniu wiem ze po jakims czasie w skrypcie potrafia sie pojawic nieoczekiwane bledy. Naprawde wiec jest takim duzym narzutem danie rzutowanie na string, tak na wszelki wypadek? No nie jest. Skoro funkcja ma zwracac string to niech zwraca string na 100% zawsze. Co do obrazow to co ja ci poradze... No sprawdzaj czy to obraz czy nie Moze przez to bedzie dzialac to dluzej ale na pewno bedzie bezpieczniej. Od biedy mozesz patrzec na rozszerzenie ale w dzisiejszych czasach to juz dawno nie jest wyznacznikiem. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.02.2018, 12:58:54
Post
#7
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Siemanko! Czemu nie ma testów jednostkowych?
|
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 12:37 |