Beveiligde uitsnede PHP
In dit onderwerp wordt het beveiligen van pub/cron.php
besproken om te voorkomen dat het wordt gebruikt in een kwaadwillige uitvinding. Als u de uitsnede niet beveiligt, kan elke gebruiker mogelijk de uitsnede uitvoeren om uw Commerce-toepassing aan te vallen.
De bouwbaan stelt verscheidene geplande taken in werking en is een essentieel deel van uw configuratie van Commerce. Geplande taken omvatten, maar zijn niet beperkt tot:
- Opnieuw indexeren
- E-mails genereren
- Nieuwsbrieven genereren
- Sitemaps genereren
U kunt een uitsnijdtaak op de volgende manieren uitvoeren:
- De opdracht
magento cron:run
gebruiken via de opdrachtregel of op een tab pub/cron.php?[group=<name>]
openen in een webbrowser
magento cron:run
gebruikt om het uitsnijden uit te voeren, omdat hiervoor een ander proces wordt gebruikt dat al veilig is.Beveiligde uitsnede met Apache
In deze sectie wordt beschreven hoe u de uitsnede kunt beveiligen met HTTP Basic-verificatie met Apache. Deze instructies zijn gebaseerd op Apache 2.2 met CentOS 6. Raadpleeg een van de volgende bronnen voor meer informatie:
Een wachtwoordbestand maken
Uit veiligheidsoverwegingen kunt u het wachtwoordbestand overal vinden, behalve in de hoofdmap van de webserver. In dit voorbeeld wordt het wachtwoordbestand opgeslagen in een nieuwe map.
Voer de volgende opdrachten in als een gebruiker met root
-rechten:
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/passwords <username>
Waar <username>
de gebruiker van de Webserver of een andere gebruiker kan zijn. In dit voorbeeld gebruiken wij de gebruiker van de Webserver, maar de keus van gebruiker is aan u.
Volg de aanwijzingen op het scherm om een wachtwoord voor de gebruiker te maken.
Als u nog een gebruiker aan het wachtwoordbestand wilt toevoegen, voert u de volgende opdracht in als een gebruiker met root
-rechten:
htpasswd /usr/local/apache/password/passwords <username>
Gebruikers toevoegen om een geoorloofde uitsnijdgroep te maken (optioneel)
U kunt toestaan meer dan één gebruiker om te lopen door deze gebruikers aan uw wachtwoorddossier, met inbegrip van een groepsdossier toe te voegen.
Een andere gebruiker toevoegen aan uw wachtwoordbestand:
htpasswd /usr/local/apache/password/passwords <username>
Als u een geoorloofde groep wilt maken, maakt u overal buiten de hoofdmap van de webserver een groepsbestand. In het groepsbestand worden de naam van de groep en de gebruikers in de groep opgegeven. In dit voorbeeld is de groepsnaam MagentoCronGroup
.
vim /usr/local/apache/password/group
Inhoud van het bestand:
MagentoCronGroup: <username1> ... <usernameN>
Uitsnede beveiligen in .htaccess
Uitsnijden beveiligen in .htaccess
-bestand:
-
Meld u aan bij uw Commerce-server als eigenaar van het bestandssysteem of schakel over naar de eigenaar van het bestandssysteem.
-
Open
<magento_root>/pub/.htaccess
in een teksteditor.(Omdat
cron.php
zich in depub
-map bevindt, bewerkt u alleen dit.htaccess
.) -
toegang van het Gewas voor één of meerdere gebruikers. Vervang de bestaande
<Files cron.php>
-instructie door:code language-conf <Files cron.php> AuthType Basic AuthName "Cron Authentication" AuthUserFile /usr/local/apache/password/passwords Require valid-user </Files>
-
toegang van het Gewas voor een groep. Vervang de bestaande
<Files cron.php>
-instructie door:code language-conf <Files cron.php> AuthType Basic AuthName "Cron Authentication" AuthUserFile /usr/local/apache/password/passwords AuthGroupFile <path to optional group file> Require group <name> </Files>
-
Sla de wijzigingen in
.htaccess
op en sluit de teksteditor af. -
Ga met verder verifiëren kruin veiligis.
Beveiligde uitsnede met Nginx
In deze sectie wordt besproken hoe u de uitsnede kunt beveiligen met behulp van de Nginx-webserver. U moet de volgende taken uitvoeren:
- Een gecodeerd wachtwoordbestand voor Nginx instellen
- De configuratie van uw nginx wijzigen om naar het wachtwoordbestand te verwijzen wanneer u
pub/cron.php
opent
Een wachtwoordbestand maken
Raadpleeg een van de volgende bronnen om een wachtwoordbestand te maken voordat u doorgaat:
Uitsnede beveiligen in nginx.conf.sample
Commerce beschikt over een geoptimaliseerd voorbeeld-nginx-configuratiebestand uit het vak. We raden u aan het te wijzigen om de afbeelding te beveiligen.
-
Voeg het volgende toe aan uw
nginx.conf.sample
dossier:code language-conf #Securing cron location ~ cron\.php$ { auth_basic "Cron Authentication"; auth_basic_user_file /etc/nginx/.htpasswd; try_files $uri =404; fastcgi_pass fastcgi_backend; fastcgi_buffers 1024 4k; fastcgi_read_timeout 600s; fastcgi_connect_timeout 600s; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
-
Start de engine opnieuw:
systemctl restart nginx
- Ga met verder verifiëren kruin veiligis.
Controleren of de uitsnede beveiligd is
De eenvoudigste manier om te controleren of pub/cron.php
veilig is, is om te controleren of er rijen in de databasetabel van cron_schedule
worden gemaakt nadat u wachtwoordverificatie hebt ingesteld. In dit voorbeeld worden SQL-opdrachten gebruikt om de database te controleren, maar u kunt elk gewenst gereedschap gebruiken.
default
-uitsnede dat u in dit voorbeeld uitvoert, wordt uitgevoerd volgens het schema dat is gedefinieerd in crontab.xml
. Een aantal snijtaken wordt slechts eenmaal per dag uitgevoerd. De eerste keer dat u de functie voor uitsnijden uitvoert vanuit de browser, wordt de tabel cron_schedule
bijgewerkt, maar volgende pub/cron.php
-aanvragen worden uitgevoerd volgens het geconfigureerde schema.om te verifiëren kruin veilig is:
-
Meld u aan bij de database als Commerce-databasegebruiker of als
root
.Bijvoorbeeld:
code language-bash mysql -u magento -p
-
Gebruik de Commerce-database:
code language-shell use <database-name>;
Bijvoorbeeld:
code language-shell use magento;
-
Verwijder alle rijen uit de databasetabel
cron_schedule
:code language-shell TRUNCATE TABLE cron_schedule;
-
Uitsnijden vanuit een browser uitvoeren:
code language-shell http[s]://<Commerce hostname or ip>/cron.php?group=default
Bijvoorbeeld:
code language-shell http://magento.example.com/cron.php?group=default
-
Voer desgevraagd de naam en het wachtwoord van een geautoriseerde gebruiker in. In de volgende afbeelding ziet u een voorbeeld.
-
Controleer of er rijen aan de tabel zijn toegevoegd:
code language-shell SELECT * from cron_schedule; mysql> SELECT * from cron_schedule; +-------------+-----------------------------------------------+---------+----------+---------------------+---------------------+-------------+-------------+ | schedule_id | job_code | status | messages | created_at | scheduled_at | executed_at | finished_at | +-------------+-----------------------------------------------+---------+----------+---------------------+---------------------+-------------+-------------+ | 1 | catalog_product_outdated_price_values_cleanup | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 2 | sales_grid_order_async_insert | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 3 | sales_grid_order_invoice_async_insert | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 4 | sales_grid_order_shipment_async_insert | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 5 | sales_grid_order_creditmemo_async_insert | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 6 | sales_send_order_emails | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 7 | sales_send_order_invoice_emails | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 8 | sales_send_order_shipment_emails | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 9 | sales_send_order_creditmemo_emails | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 10 | newsletter_send_all | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:25:00 | NULL | NULL | | 11 | captcha_delete_old_attempts | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:30:00 | NULL | NULL | | 12 | captcha_delete_expired_images | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:30:00 | NULL | NULL | | 13 | outdated_authentication_failures_cleanup | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | | 14 | magento_newrelicreporting_cron | pending | NULL | 2017-09-27 14:24:17 | 2017-09-27 14:24:00 | NULL | NULL | +-------------+-----------------------------------------------+---------+----------+---------------------+---------------------+-------------+-------------+ 14 rows in set (0.00 sec)
Uitsnijden uitvoeren vanuit een webbrowser
U kunt uitsnijden op elk gewenst moment uitvoeren met een webbrowser, bijvoorbeeld tijdens het ontwikkelen.
Als u een Apache-webserver gebruikt, moet u de beperking uit het .htaccess
-bestand verwijderen voordat u het uitsnijden in een browser kunt uitvoeren:
-
Meld u aan bij uw Commerce-server als een gebruiker met schrijfmachtigingen voor het Commerce-bestandssysteem.
-
Open een van de volgende opties in een teksteditor (afhankelijk van het invoerpunt voor Magento):
code language-text <magento_root>/pub/.htaccess <magento_root>/.htaccess
-
Verwijder of verwijder het volgende:
code language-conf ## Deny access to cron.php <Files cron.php> order allow,deny deny from all </Files>
Bijvoorbeeld:
code language-conf ## Deny access to cron.php #<Files cron.php> # order allow,deny # deny from all #</Files>
-
Sla de wijzigingen op en sluit de teksteditor af.
Vervolgens kunt u de bewerking als volgt uitvoeren in een webbrowser:
code language-text <your hostname or IP>/<Commerce root>/pub/cron.php[?group=<group name>]
Waarbij:
-
<your hostname or IP>
is de hostnaam of het IP-adres van uw Commerce-installatie -
<Commerce root>
is de documentafhankelijke relatieve map van de webserver waarop u de Commerce-software hebt geïnstalleerd.De exacte URL die u gebruikt om de Commerce-toepassing uit te voeren, is afhankelijk van de configuratie van uw webserver en virtuele host.
-
<group name>
is een geldige naam voor een uitsnijdgroep (optioneel)
Bijvoorbeeld:
https://magento.example.com/magento2/pub/cron.php?group=index