Zadejte hledaný výraz...

Jak povolit jen některé GET proměnné?

Petr Jeník
verified
rating uzivatele
(71 hodnocení)
10. 1. 2014 15:58:31
Zdravim
Trochu se peru se spamboty a jinou havětí, která mi hrozně brzdí jeden web.
Vysledoval jsem, že tihle šmejdi nejčastěji zkouší různé fígle s pomocí GET proměnných v URL.
Tu nejčastější jsem ručně zakázal podmínkou.
Ale potřebuji vymyslet i něco na ty méně časté
Příklad:
sám používám proměnné "clanek" "zpravy" "rubrika"
takže tyhle potřebuju mít povolené.
a pokud se někdo pokusí zapsat do URL jinou než mnou povolené, tak to hodí DIE.
nějaké řešení jak na to?
10. 1. 2014 15:58:31
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984103
Petr Soukup
verified
rating uzivatele
(5 hodnocení)
10. 1. 2014 16:10:41
Aplikaci přece musí být úplně jedno, když někdo posílá requesty na jiné proměnné, než jaké používá. Nebo ne?
10. 1. 2014 16:10:41
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984102
Martin
verified
rating uzivatele
(62 hodnocení)
10. 1. 2014 16:12:01
Nestačilo by si ty povolené které používáš dát třeba do pole, pak na začátku scriptu projet $_GET foreachem a ověřovat, zda jsou ty proměnné povolené. Pokud ne, tak die.
10. 1. 2014 16:12:01
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984101
Petr Jeník
verified
rating uzivatele
(71 hodnocení)
10. 1. 2014 16:12:58
jedno jí to je, ale ti spamboti to zkouší 100 za vteřinu a to zatěžuje server takže já chci docílit toho, že když se zadá do URL nějaká nepovolená proměnná, tak to ukončí script a nebude to zbytečně server zatěžovat
10. 1. 2014 16:12:58
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984100
Martin
verified
rating uzivatele
(62 hodnocení)
10. 1. 2014 16:13:04
Napsal Souki;1042375
Aplikaci přece musí být úplně jedno, když někdo posílá requesty na jiné proměnné, než jaké používá. Nebo ne?
Aplikaci to jedno určitě bude, ale asi má něco náročnýho na server a zbytečně to spouští boti.
10. 1. 2014 16:13:04
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984099
Petr Jeník
verified
rating uzivatele
(71 hodnocení)
10. 1. 2014 16:16:04
Napsal Martin Kejzlar;1042377
Nestačilo by si ty povolené které používáš dát třeba do pole, pak na začátku scriptu projet $_GET foreachem a ověřovat, zda jsou ty proměnné povolené. Pokud ne, tak die.
já hlavně nevím jak určit, zda tam nějaká proměnná je nebo ne a pokud je, pak jaká (nikoli hodnota té proměnné, ale proměnná samotná)
jakmile zjistím zda tam nějaká je, pak už je řešení s polem a foreachem na snadě, ale nejdřív script musí zjistit, jaká proměnná a zda vůbec tam nějaká je. A s tím si nevím rady.
10. 1. 2014 16:16:04
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984098
Petr Soukup
verified
rating uzivatele
(5 hodnocení)
10. 1. 2014 16:18:38
Aha, už tomu rozumím. Cílem není filtrovat proměnné, ale blokovat roboty.
To bych rozhodně dělal o úroveň výš - třeba v nginx. Spuštění php procesu sebere nějaký výkon a hlavně jich může být spuštěné omezené množství, takže bych je raději filtroval už ve web serveru. Ideálně podle IP nebo user-agent, ale podle query parametrů to půjde taky.
10. 1. 2014 16:18:38
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984097
Martin
verified
rating uzivatele
(62 hodnocení)
10. 1. 2014 16:19:41
Napsal Petr Jeník;1042381
já hlavně nevím jak určit, zda tam nějaká proměnná je nebo ne a pokud je, pak jaká (nikoli hodnota té proměnné, ale proměnná samotná)
jakmile zjistím zda tam nějaká je, pak už je řešení s polem a foreachem na snadě, ale nejdřív script musí zjistit, jaká proměnná a zda vůbec tam nějaká je. A s tím si nevím rady.
Uděláš si pole povolených. Uděláš foreach ($_GET as $key => $value) a v každým cyklu ověříš, zda je $key v poli povolených. Pokud ne, tak to zabiješ.
10. 1. 2014 16:19:41
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984096
Petr Jeník
verified
rating uzivatele
(71 hodnocení)
10. 1. 2014 16:21:10
IP a user-agenty blokovat nemůžu - je jich mraky a nové a nové stále přibývají
ideální je myslím to řešení s těmi GET proměnnými - tím že jsem zakázal tu jednu, se výkon neskutečně zvedl, ale riziko, že začnou využívat jiný název proměnné tu je a tak to chci zamezit a nevím jak :(
---------- Příspěvek doplněn 10.01.2014 v 16:23 ----------
Uděláš si pole povolených. Projedeš to foreach ($_GET as $key => $value) a v každým cyklu ověříš, zda je $key v poli povolených. Pokud ne, tak to zabiješ.
Napiš mi těch pár řádků prosím - jsem z toho jelen - a pošli mi do soukromé zprávy číslo účtu či PayPal email - pokud to bude fungovat, odměna tě nemine.
Předem díkes
10. 1. 2014 16:21:10
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984095
Petr Soukup
verified
rating uzivatele
(5 hodnocení)
10. 1. 2014 16:23:39
A jak moc rotují IP? Je možné na úrovni webserveru blokovat požadavky, když jich přijde třeba víc jak 100 z jedné IP za sekundu
10. 1. 2014 16:23:39
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984094
Petr Soukup
verified
rating uzivatele
(5 hodnocení)
10. 1. 2014 16:27:25
Napsal Petr Jeník;1042385
Napiš mi těch pár řádků prosím - jsem z toho jelen - a pošli mi do soukromé zprávy číslo účtu či PayPal email - pokud to bude fungovat, odměna tě nemine.
Předem díkes
if(count(array_diff(array_keys($_GET),array('stranka','kategorie','utm_source'))>0){
die();
}
Ale tohle řešení je fakt nesmysl.
10. 1. 2014 16:27:25
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984093
Jak píše Souki, tohle bych řešil na úrovni serveru, ne aplikace.
Pokud používáš Apache, viz třeba toto
apache2 - Stop DoS attacks with an IP tables rule? - Server Fault
http://serverfault.com/questions/345532/stop-dos-attacks-with-an-ip-tables-rule/345535#345535
10. 1. 2014 16:28:40
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984092
To se řeší na úrovní firewallu. Lze docílit toho, že při překročení určitém počtu požadavků za určitý časový interval je daná IP na určitou dobu zablokována. Řešit to na úrovni PHP nemá smysl ani větší efekt.,
10. 1. 2014 16:29:19
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984091
Martin
verified
rating uzivatele
(62 hodnocení)
10. 1. 2014 16:32:34
Něco v tomhle stylu. Asi je nějaký příkaz na vyhledávání klíčů pole, ale to nepoužívám a teď se mi to nechce hledat, tak tam je ten druhý foreach, ale mělo by to fungovat. Raději bych to takhle rozepsal. Pak to můžeš dobře logovat. To řešení od Souki má třeba mezeru v tom, že pokud pošle stejný počet parametrů jako máš ty povolených, tak to stejně projde, i když tam budou jiné.
PS: Nějak jsem přehlédnul, že ty požadavky chodí v takové rozsahu. To by PHP dostalo taky pěkně zabrat a chce to řešit výš. Já něco podobného používám spíš na sledování botů nebo lidí při pokusech o nějaký prasečinky. Ale to jsou dotazy, které přijdou jen občas a určitě se nejedná o DDoS.
10. 1. 2014 16:32:34
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984090
Petr Jeník
verified
rating uzivatele
(71 hodnocení)
10. 1. 2014 16:32:41
Díky všem za odpovědi
1) vyzkouším řešení s PHP
2) pověřím serveráka aby to proběhl - servery jsou pro mě velká neznámá
10. 1. 2014 16:32:41
https://webtrh.cz/diskuse/jak-povolit-jen-nektere-get-promenne/#reply984089
Pro odpověď se přihlašte.
Přihlásit