PDA

Zobacz pełną wersję : Nowy komponent do zabezpieczeń Joomla - za darmo



Frodoo
18-10-2019, 11:39
Dziś mam przyjemność Wam zaprezentować nowy komponent do zabezpieczeń Joomla - DudoniSecure. Zrobiłem go ze względu na to, że są płatne tego typu komponenty, a mój udostępniam Wam zupełnie za darmo. Rozwijam go od lutego 2019. Aktualna wersja to 1.7. Komponent posiada tylko dwa widoki w panelu i jest lekki. Można np. usunąć dodatkowo nie potrzebne pliki, które instalują się wraz z Joomla mi. pliki graficzne w folderze images. Przesyłanie Flasha powinno być wyłączone. Ostrzeżenie, że nie posiadasz certyfikatu ssl i wiele innych usprawnień i zabezpieczeń. Jest ich razem 19.
Proszę was o przetestowanie i sugestie co można byłoby dodać/zmienić w nowych wersjach. Nie testowany na Joomla 2.5

<usunięto starą wersję>

siristru
18-10-2019, 12:42
Dzięki za wkład, super, że się podjąłeś.

Na gorąco zajrzałem do kodu i chce się podzielić kilkoma uwagami:

1. Dobrą praktyką jest używać języka angielskiego w nazewnictwie zmiennych czy funkcji
2. Używaj stałych językowych - nie hardkoduj tekstów
3. Stała DS jest deprecated od Joomla 1.6 należy używać slasha (https://docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_ 3_and_Joomla_Platform_12.2 )
Tak wiem użyłeś:


if (!defined('DS')) define('DS', DIRECTORY_SEPARATOR);

Tylko to jest nie potrzebne.

4. Netykieta - nie używaj kapitalików jako tekstu na przyciskach.

5. "Konfiguracja pamięci podręcznej Joomla powinna być włączona" - dlaczego "powinna"? Włącza ten kto potrzebuje.

6. "Raportowanie błędów powinno być ustawione na Brak" dlaczego powinno być na "Brak"? Raczej właśnie powinno być na "Default" bo jak się pojawi błąd to przynajmniej go zobaczę. "Brak" tylko w przypadku gdy ktoś ma na serwerze źle skonfigurowane wyświetlanie błędów.

7. "Captcha powinna być włączona w konfiguracji, a także powinien być opublikowany plugin "CAPTCHA - reCAPTCHA"" dlaczego "powinna"? A jak na stronie nie ma rejestracji ani formularzy? Komponent "Kontakty" jest wyłączony?

8. "Występują nie potrzebne pliki". Lista "niepotrzebnych" plików jest dość kontrowersyjna:


if (file_exists($path . '/.drone.yml')) unlink($path . '/.drone.yml');
if (file_exists($path . '/robots.txt.dist')) unlink($path . '/robots.txt.dist');
if (file_exists($path . '/web.config.txt')) unlink($path . '/web.config.txt');
if (file_exists($path . '/joomla.xml')) unlink($path . '/joomla.xml');
if (file_exists($path . '/build.xml')) unlink($path . '/build.xml');
if (file_exists($path . '/LICENSE.txt')) unlink($path . '/LICENSE.txt');
if (file_exists($path . '/README.txt')) unlink($path . '/README.txt');
if (file_exists($path . '/htaccess.txt')) unlink($path . '/htaccess.txt');
if (file_exists($path . '/LICENSES.php')) unlink($path . '/LICENSES.php');
if (file_exists($path . '/configuration.php-dist')) unlink($path . '/configuration.php-dist');
if (file_exists($path . '/CHANGELOG.php')) unlink($path . '/CHANGELOG.php');
if (file_exists($path . '/COPYRIGHT.php')) unlink($path . '/COPYRIGHT.php');
if (file_exists($path . '/CREDITS.php')) unlink($path . '/CREDITS.php');
if (file_exists($path . '/INSTALL.php')) unlink($path . '/INSTALL.php');
if (file_exists($path . '/LICENSE.php')) unlink($path . '/LICENSE.php');
if (file_exists($path . '/CONTRIBUTING.md')) unlink($path . '/CONTRIBUTING.md');
if (file_exists($path . '/phpunit.xml.dist')) unlink($path . '/phpunit.xml.dist');
if (file_exists($path . '/README.md')) unlink($path . '/README.md');
if (file_exists($path . '/.travis.yml')) unlink($path . '/.travis.yml');
if (file_exists($path . '/travisci-phpunit.xml')) unlink($path . '/travisci-phpunit.xml');
if (file_exists($path . '/images/banners/osmbanner1.png')) unlink($path . '/images/banners/osmbanner1.png');
if (file_exists($path . '/images/banners/osmbanner2.png')) unlink($path . '/images/banners/osmbanner2.png');
if (file_exists($path . '/images/banners/shop-ad-books.jpg')) unlink($path . '/images/banners/shop-ad-books.jpg');
if (file_exists($path . '/images/banners/shop-ad.jpg')) unlink($path . '/images/banners/shop-ad.jpg');
if (file_exists($path . '/images/banners/white.png')) unlink($path . '/images/banners/white.png');
if (file_exists($path . '/images/headers/blue-flower.jpg')) unlink($path . '/images/headers/blue-flower.jpg');
if (file_exists($path . '/images/headers/maple.jpg')) unlink($path . '/images/headers/maple.jpg');
if (file_exists($path . '/images/headers/raindrops.jpg')) unlink($path . '/images/headers/raindrops.jpg');
if (file_exists($path . '/images/headers/walden-pond.jpg')) unlink($path . '/images/headers/walden-pond.jpg');
if (file_exists($path . '/images/headers/windows.jpg')) unlink($path . '/images/headers/windows.jpg');
if (file_exists($path . '/images/joomla_black.gif')) unlink($path . '/images/joomla_black.gif');
if (file_exists($path . '/images/joomla_black.png')) unlink($path . '/images/joomla_black.png');
if (file_exists($path . '/images/joomla_green.gif')) unlink($path . '/images/joomla_green.gif');
if (file_exists($path . '/images/joomla_logo_black.jpg')) unlink($path . '/images/joomla_logo_black.jpg');
if (file_exists($path . '/images/powered_by.png')) unlink($path . '/images/powered_by.png');
if (file_exists($path . '/images/sampledata/fruitshop/apple.jpg')) unlink($path . '/images/sampledata/fruitshop/apple.jpg');
if (file_exists($path . '/images/sampledata/fruitshop/bananas_2.jpg')) unlink($path . '/images/sampledata/fruitshop/bananas_2.jpg');
if (file_exists($path . '/images/sampledata/fruitshop/fruits.gif')) unlink($path . '/images/sampledata/fruitshop/fruits.gif');
if (file_exists($path . '/images/sampledata/fruitshop/tamarind.jpg')) unlink($path . '/images/sampledata/fruitshop/tamarind.jpg');
if (file_exists($path . '/images/sampledata/parks/animals/180px_koala_ag1.jpg')) unlink($path . '/images/sampledata/parks/animals/180px_koala_ag1.jpg');
if (file_exists($path . '/images/sampledata/parks/animals/180px_wobbegong.jpg')) unlink($path . '/images/sampledata/parks/animals/180px_wobbegong.jpg');
if (file_exists($path . '/images/sampledata/parks/animals/200px_phyllopteryx_taeniolatus1.jpg')) unlink($path . '/images/sampledata/parks/animals/200px_phyllopteryx_taeniolatus1.jpg');
if (file_exists($path . '/images/sampledata/parks/animals/220px_spottedquoll_2005_seanmcclean.jpg')) unlink($path . '/images/sampledata/parks/animals/220px_spottedquoll_2005_seanmcclean.jpg');
if (file_exists($path . '/images/sampledata/parks/animals/789px_spottedquoll_2005_seanmcclean.jpg')) unlink($path . '/images/sampledata/parks/animals/789px_spottedquoll_2005_seanmcclean.jpg');
if (file_exists($path . '/images/sampledata/parks/animals/800px_koala_ag1.jpg')) unlink($path . '/images/sampledata/parks/animals/800px_koala_ag1.jpg');
if (file_exists($path . '/images/sampledata/parks/animals/800px_phyllopteryx_taeniolatus1.jpg')) unlink($path . '/images/sampledata/parks/animals/800px_phyllopteryx_taeniolatus1.jpg');
if (file_exists($path . '/images/sampledata/parks/animals/800px_wobbegong.jpg')) unlink($path . '/images/sampledata/parks/animals/800px_wobbegong.jpg');
if (file_exists($path . '/images/sampledata/parks/banner_cradle.jpg')) unlink($path . '/images/sampledata/parks/banner_cradle.jpg');
if (file_exists($path . '/images/sampledata/parks/landscape/120px_pinnacles_western_australia.jpg')) unlink($path . '/images/sampledata/parks/landscape/120px_pinnacles_western_australia.jpg');
if (file_exists($path . '/images/sampledata/parks/landscape/120px_rainforest_bluemountainsnsw.jpg')) unlink($path . '/images/sampledata/parks/landscape/120px_rainforest_bluemountainsnsw.jpg');
if (file_exists($path . '/images/sampledata/parks/landscape/180px_ormiston_pound.jpg')) unlink($path . '/images/sampledata/parks/landscape/180px_ormiston_pound.jpg');
if (file_exists($path . '/images/sampledata/parks/landscape/250px_cradle_mountain_seen_from_barn_bluff.jpg')) unlink($path . '/images/sampledata/parks/landscape/250px_cradle_mountain_seen_from_barn_bluff.jpg');
if (file_exists($path . '/images/sampledata/parks/landscape/727px_rainforest_bluemountainsnsw.jpg')) unlink($path . '/images/sampledata/parks/landscape/727px_rainforest_bluemountainsnsw.jpg');
if (file_exists($path . '/images/sampledata/parks/landscape/800px_cradle_mountain_seen_from_barn_bluff.jpg')) unlink($path . '/images/sampledata/parks/landscape/800px_cradle_mountain_seen_from_barn_bluff.jpg');
if (file_exists($path . '/images/sampledata/parks/landscape/800px_ormiston_pound.jpg')) unlink($path . '/images/sampledata/parks/landscape/800px_ormiston_pound.jpg');
if (file_exists($path . '/images/sampledata/parks/landscape/800px_pinnacles_western_australia.jpg')) unlink($path . '/images/sampledata/parks/landscape/800px_pinnacles_western_australia.jpg');
if (file_exists($path . '/images/sampledata/parks/parks.gif')) unlink($path . '/images/sampledata/parks/parks.gif');

Zgoda, ze pliki "sample" nie są w sumie potrzebne bo to dane demonstracyjne. Ale pliki informacyjne? Licencja? szablony plików htaccess.txt czy robots.txt.dist sa nawet potzrebne jak ktoś namiesza w swoich. Tak samo configuration.php-dist. Raczej nie usuwałbym tych plików.

Generalnie komponent jest fajną check listą dla początkujących i faktycznie moze pomóc. Ale w obecnej formie moze też nieco zepchnać na manowce sugerując, ze coś "powinno" być kiedy to zależy od danej sytuacji i potrzeby.

Sugerowałbym podzielenie listy na:

Krytyczne
Ważne
Zalecane

I uszeregować konkretne ustawienia (odpowiednio też ikonki w kolorach by nie straszyć czerwonym x)

Frodoo
18-10-2019, 21:20
Takie sugestie właśnie potrzebuje. Wiele usprawnień już poprawiłem. Poniżej kolejna wersja. Doszła jedna pozycja, a także dodałem trzecią ikonę, która pokazuje ustawienia ważne.

<usunięto starą wersję>

Frodoo
30-11-2020, 19:29
Wyszła kolejna stabilna wersja komponentu
<usunięto starą wersję>

Bazyl
30-11-2020, 21:04
Fajnie.
Czy masz gdzieś opisaną listę zmian?

Frodoo
30-11-2020, 21:19
Do wersji 1.9 jest w zakładce "Informacje o wersji", ale do 2.0 nie umieściłem jeszcze bo tam było kilka niedociągnięć w pliku językowym. Tutaj pominąłem wersje 1.9 tylko i nie umieściłem jej do pobrania.

Frodoo
30-04-2021, 04:26
Wyszła nowa wersja, która ma 7 nowych zabezpieczeń. Razem jest już 28. Proszę o przetestowanie na większej liczbie instalacji Joomla. Podobne rozwiązanie ma strona manage.mysites.guru, ale trzeba instalować jakieś ich dodatki, które łączą się z twoją stroną.
Oto załącznik <usunięto starą wersję>

Frodoo
30-04-2021, 14:02
Nowsza wersja <usunięto starą wersję>

Frodoo
28-05-2021, 21:39
Najnowsza wersja <usunięto starą wersję>

Frodoo
29-05-2021, 21:45
Zmiany w nowej wersji

Dodanie funkcji, która naprawia zgody na przetwarzanie danych osobowych
Dodanie języka angielskiego
Powstała strona https://secure.dudoni.pl, na której można pobrać komponent
Uwaga! Włączenie cache w Joomla w ustawieniach powoduje nie nanoszenie zmian w widoku komponentu
Przycisk do przywracania zmian
Aktualizacje w panelu
Teraz zmieniane są prawa do pliku przed zmianami configuration.php i przywracane są do 444

siristru
29-05-2021, 23:16
;) Masz parę isusów na stronie ;)
http://prntscr.com/13kcwl1

Frodoo
30-05-2021, 20:21
;) Masz parę isusów na stronie ;)
Ok wyłączyłem pokazywanie błędów.

siristru
30-05-2021, 20:38
Na stronie httpS ładujesz coś z URLów http - stąd wykrzyknik: https://www.whynopadlock.com/results/f522980b-8a4f-48cc-874c-ded88ba653a8

Frodoo
09-01-2023, 10:04
Wyszła nowa wersja 2.7. Można ją aktualizować w aktualizacjach twojej strony jeśli go masz lub można pobrać na stronie https://secure.dudoni.pl/pobierz/