Autor Zpráva
TomasJ
Profil
Dobrý den, představuji vám web http://samp.k3s4.sk , který je zaměřený na multiplayerovou hru GTA San Andreas.
Zatím tam nejsou všechny stránky a ty chybějící nahrazuji klasickým textem "nenalezeno".
Chtěl bych po vás zhodnotit vzhled webu - co na něj říkáte? :)

CÍLENÉ NA TY ZKUŠENĚJŠÍ WEBMASTERY:
Dále nějaké technické věci:
Přidal jsem anti-flood webu (skript proti přetěžování DDoS útoky).
Funguje tak, že mi běží UDP server, na kterém si ukládám každou přistupující IP a její čas. Záznamy s IP starší jak 2 minuty mažu. Pokud se čas posledního připojení od aktuálního liší jen o několik ms, je považováno připojení za útočné a na začátku stránky ukončené s textem chyby 403.

MySQL dotazy fungují též přes tento UDP server, což mi značně zrychlí načítání stránky.

No a já chci vědět od vás, jaký máte názor na tento způsob ochrany / urychlení webu?
-------------------------------------------------------------------------------------------

Děkuji za konstruktivní kritiky / pochvaly.
shaggy
Profil
TomasJ:
No a já chci vědět od vás, jaký máte názor na tento způsob ochrany / urychlení webu?
Je skvelý, hodilo mi párkrát 403.
Proti DDoS sa používajú rôzne sofistikované (drahé) riešenia renomovaných značiek, myslíš, že tvoj spôsob bude účinný? Myslíš, že to má zmysel? Kto by chcel zhadzovať "bezvýznamný" web?
TomasJ
Profil
Zase tak bezvýznamný není. Tedy zatím ano, ale nebude. Bude tam kompletní správa herních účtů, včetně plateb VIP k účtu a podobné, takže bude co chránit. Ale především: Tento typ útoků vytěžuje server. Bez ochrany stoupal k výšinám, až na 30% CPU. S touto ochranou to nad 12% nejde.
Ale děkuji, nevěděl jsem, že někdo toto řeší a je to drahé. Předpokládal jsem, že existuje nějaká lepší možnost než toto (rozšíření pro apache). :)
user243
Profil
- divný název domény;
- statický titulek webu;
- přihlašovací formulář by mi byl milejší někde v horní části stránky;
- font bych volil hlavně takový, aby se dobře četl viz. patička;
- nelíbí se mi ta rolovací lišta u novinek;
- odkazy v horním menu na návody a události jsou prázdné, ale úplně prázdné bez nějakého slova vysvětlení; přičemž si myslím, že v událostech by měl být asi seznam všech novinek, co se staly na webu nebo ve hře;
- na úvodní stránce, ani na kartě Informace nejsou žádné informace o tom, co je to za, jaký je jeho účel; kdyby jsi tady nenapsal, že jde o GTA SA, tak by mi to nejspíš ani nedošlo; něco o hře čtu až v sekci Ke stažení;
- doufám, že ten shoutboard je dělaný tak, že registrovaní nemusí vyplňovat kontrolní text a stejně tak lidé, kteří jej už jednou vyplnili;
- spodní menu mi nepřijde jako dobrý nápad a ani nechápu, proč je tak divně dělané;
TomasJ
Profil
user243:
Nechápu, co je na doméně divného? Náš server hostuje herní portál k3s4.sk (momentálně bez webových stránek), takže můžeme být rádi za prostor k vedení serveru a webu - máme vše zdarma, takže na tom se měnit nic nebude...

Statický titulek - Ano máš pravdu, zapomněl jsem přidat dynamickou úpravu titulku.

Přihlašovací formulář - Kde přesně? Je to navržené tak, aby bylo vidět logo + název (The San Fierro City) a mě nějak nenapadá, jak jinak by tam mohlo být.

Rolovací lišta - Nějaký nápad jak to vyřešit hezčí formou bez použití JavaScriptu? Přemýšlel jsem dát tam jen první 3 - 4 novinky a pak odkaz na Archív novinek. Myslíš, že by to mohlo být lepší?

Události - Ovšem, bude přibývat, avšak trošku jiný obsah než předpokládáš Ty.

Informace - To si myslím, není třeba řešit. Každý kdo náš web navštíví, ho navštíví s očekáváním, že jde o web k hernímu módu. V titulku máš dokonce to GTA SA napsané a na úvodní stránce je tématika hry GTA SA. Tento problém je individuální a jsi zatím první, kdo ho má.

Shoutboard - Registrovaní nemusí (nemohou) vyplňovat pole "Nickname", kontrolní kód ano (nad tím ještě pouvažuji) - hlavním účelem je ochrana proti spamu (ať už nějakého neregistrovaného, nebo nějakého nenormálního uživatele). Najdou se lidé, kteří se jen kvůli spamu u nás na serveru registrují a pak jdou na sekci Shoutboard, kde si vesele spamují.

Spodní menu - Zde jsou položky týkající se pouze hry.

Patička - Jaké písmo by se tam hodilo? Arial se mi tam moc nelíbí, třetí font už tam fakt míchat nechci a toto mi nepřijde nějak nečitelné... Teda alespoň nikdo, kdo zatím web hodnotil, neměl žádné problémy s přečtením textu v patičce, nicméně je možné, že někde může být moc malé, takže ho zkusím zvětšit a uvidí se, jestli se zlepší.

Děkuji Ti.
user243
Profil
- vadí mi samp.k3s4.sk, špatně se pamatuje a nic přímo neříká;
- přihlašovací formulář dát více nahoru; možná to tak navržené je, ale rozhodně ne pro všechna (používaná) rozlišení a já k důležitým věcem nerad roluji;
- rolovací lištu odstraníš jednoduše, když obalovací div nebude mít nastavenou pevnou výšku; nápad mít tam jen pár novinek a odkaz na archiv se mi líbí;
- informace... rozhodně je to minimálně slušnost, když si jdeš do obchodu něco koupit, tak si vybíráš jen podle obrázku? není tam ani popis v meta tagu; zkus si vyhledat stránku ve vyhledávači... jeden mi tam vypsal jako popis klíčová slova webu, jinak to byl nic neříkající text;
- zkusit tomu shoutboardu dát omezení na odesílání jedné zprávy ze 5 min... např.;
- ze spodního menu bych udělal postraní menu;
- s tím písmem... já si myslím, že v jednoduchosti je krása;
TomasJ
Profil
Co bys místo "samp" navrhoval? Multiplayer na GTA SA se jmenuje SA-MP, takže myslím, že to je celkem odpovídající. Mimochodem nevím jak je to možné, že není vidět nic, ale v meta tagu je "description" i "keywords".

* Informace jsem připsal - snad je to teď lepší i pro ty, kteří nevědí o co jde. A názor k obrázkům - do obchodu chodíš s tím, že si chceš něco koupit. Nejdeš do obchodu s elektronikou, když si chceš koupit šroubky. Když si jdeš koupit šroubky do obchodu s těmito věcmi, vybíráš podle toho co vidíš a podle svých přání. Tím chci říct, že na web přijde jen ten, komu je hra známá. GTA SA se ve světě proslavilo, takže jej zná mnoho lidí.

* Titulek - Dynamický

* Prozatím vyplněné prázdné stránky
Předělané na "pěkné URL"
Micruss
Profil
Prosim tě oprav si ten shoutbox... to je víc náchylný k hackingu než cokoliv jinýho... jenom jsem napsal </textarea>... nějaký kód...

víc si to zabezpeči...
TomasJ
Profil
Nevím o čem mluvíš. Mohl bys mi to upřesnit?
$msg  = mysql_real_escape_string(htmlspecialchars(substr($_POST['msg'],0,500)));
Toto tam mám už od samého vytvoření ShoutBoardu.
Mimochodem tam nikdo nepřispíval, takže už vůbec nevím, co mi vlastně chceš vytknout? Nepopletl ses trošku?
shaggy
Profil
TomasJ:
Nikdy ma neprestane udivovať, že človek, ktorý pri ukladaní do databázy nezmyselne používa htmlspecialchars ide programovať ochranu proti DDoS útoku.

Neverím tomu, že na nejaký bezvýznamný (z pohľadu útočníka) web na subdoméne nonstop niekto útočí. Ak ti skutočne kleslo vyťaženie servera z 30 na 12%, tak je to buď preto, že tam ľudia prestali chodiť, alebo im všetkým hádže 403ku, aj keď sa nesnažia útočiť. Niečo o nezmyselnosti tvojho konania si môžeš prečítať aj tu: Obrana proti DoS, DDoS útoku + kolik času potřebuje útočník?
TomasJ
Profil
Ty to nechápeš... Zkoušel jsem si DDoS DoS sám. Zatěžovalo to server na 30% (celkem všechny 4 jádra - každé 30%). Pak se přidal i kamarád, šlo to na 50%. Pak jsem tam udělal to, co jsem udělal a nad 12% to nešlo. Tak to asi funguje, když už to pak nějak extra nezvýšilo zátěž ne?

A jak jsi odkazoval na výše zmíněné téma... Pročetl jsem to tak zběžně a: Já nekontroluji zátěž, ale porovnávám časy od poslední návštěvy. Mám tam, pokud je rozdíl aktuálního času a toho posledního < 0.27 (sekundy) tak se vyhodnotí požadavek jako útok a zamítne se.

  if(UDPCheckFlood()){
    header("Connection: close", true);
    header('HTTP/1.1 403 Forbidden', true);
    die("<title>403 Forbidden</title>\n<h1>Forbidden</h1>\n<p>You don't have permission to access / on this server.</p>");
  }

Pokud myslíš, že lepší je mít to rovnou jako doplněk pro Apache, to si myslím i já. Jen žádný takový neznám a i kdybych našel, nemám s žádným takovým zkušenosti. Navíc se v konfiguraci serveru moc vrtat nemůžu, protože nejsem správce.

* Všechny vyhledávače přístup k webu mají a indexují správně. Navíc 403 není trvalá, ale jen do té doby, dokud se časový rozdíl posledního přístupu s aktuálním bude lišit o méně než 0,28 sekundy.
Micruss
Profil
Vyplnil jsem jméno do zprávy jsem napsal </textarea>potom třeba <input type="file">.... a captchu jsem nevyplnil...dal jsem odeslat ukázalo mi to error, že jsem nevyplnil captchu... ale ukázalo mi to taky tu zprávu, kterou již odeslal a nick... takže tam bylo nahrání souboru na web...

tady máš kdyžtak screenshot
TomasJ
Profil
<td style="width:150px;">test:<br><b>[11.03.2013&nbsp;10:54:36]</b></td><td style="word-break: inherit;">&lt;/textarea&gt;</td>
Žádný soubor nezpracovávám, takže se žádný na serveru neuloží. Že tam máš screenshot kde je pole pro soubor, to si umím hodit JavaScriptem také, ale nic se nenahraje do zprávy (která se bez zadání kódu z obrázku nepošle), jen název. Toto jsou věci, které jsem testoval už na začátku. Vše funguje a není tam žádná bezpečnostní díra. Až mi hodíš tlačítko do příspěvku, pak se budu zajímat kde je chyba, jinak vidím, že vše jde jak má.

Mimochodem shaggy:
Co má společného ochrana proti DDoS se stylem ukládání dat do MySQL?
Já se nesnažím htmlSpecialChars docílit ochrany proti SQL Inject, ale aby nikdo nemohl psát html tagy. Proti SQL Injectu mám mysql_real_escape_string.
shaggy
Profil
TomasJ:
Že tam máš screenshot kde je pole pro soubor, to si umím hodit JavaScriptem také
To je práve tvoj problém. Keby si htmlsecialchars nepoužíval pri ukladaní do db, ale až pri výpise, nič také by sa ti nestalo. On to "rozbil" jednoducho tak, že do textarea dal napr. takýto kód:
</textarea></td></tr></form></table></div>
<div style="display: none">
Ty pri výpise neošetruješ vstup (uloženie do databázy ešte neprebehlo, tým pádom to neprešlo ani cez htmlspecialchars) a chyba je na svete. Keď to tak máš tu, ktovie, ako máš zabezpečené ostatné časti webu.

A ako to súvisí s tvojou ochranou proti DoS/DDoS útokom? Asi tak, že ak nedokážeš urobiť tak základnú vec, ako bezpečne ošetriť formulár, myslíš, že dokážeš urobiť ochranu, ktorou sa zaoberajú špičkoví programátori a ktorá vyžaduje trochu viac úsilia, než jednoduchý skript začiatočníka?
Testoval si to s kamarátom, myslíš, že to skutočne pomôže, ak sa niekto rozhodne zaútočiť na tvoj web (nehovorím o dvoch ľuďoch)? Myslíš si, že je reálna šanca, že niekto na ten tvoj web zaútočí? Prečo by to preboha robil?
Micruss
Profil
Já sem dával jenom příklad, ale myslím si, že nějakej zkušenej hacker by si stim mohl pohrát přes XSS ;-)
TomasJ
Profil
              if(!$Registered) $nick = mysql_real_escape_string(htmlspecialchars($_POST['nick']));
              else $nick = $Nickname;
              if(/* ... kontrola */){
                $msg  = mysql_real_escape_string(htmlspecialchars(substr($_POST['msg'],0,500)));
                $ip   = $_SERVER['REMOTE_ADDR'];
                $MySQL->Query("INSERT INTO TabulkaXXX (ID,Time,Nick,Message,Registered,AccID,IP) VALUES(0,UNIX_TIMESTAMP(),'$nick','$msg',$Registered,$AccID,'$ip')");
                $MessageHistory = "";
              }

Ukažte mi chybu. Při ukládání to ošetřuji, takže do DB se nedostane nic nežádoucího. Myslíte si že dostane? Ukažte mi to na webu, já na to kouknu, opravím to (pokud tam bude co opravovat - což momentálne nění).

POZORNĚ SI PROHLÉDNĚTE KÓD.

Kdyby se někdo ptal, proč používám htmlspecialchars už na vstup a ne na výstup, je to proto, abych případně v MySQL adminovi mohl upravit příspěvek (zvýraznit, ...).
Micruss
Profil
Ale tady nikdo nic o to tvym vstupu nemluví, ta zpráva se neodešle do databáze... když nevyplníš údaje...

nick: Test
zpráva: </textarea>... nebezpečný kód....

a Captcha nevyplníš dáš odeslat a ukáže ti tu chybu, že si nevyplnil captchu + tu tvoji zprávu a ta je náchylna na XSS... asi tam máš <textarea name="msg"><?php if(isset($_POST['msg'])) { echo $_POST['msg']; } ?></textarea>

a to echo si ošetři <?php echo htmlspecialchars($_POST['msg']); ?>
TomasJ
Profil
Bože! :)
Nevypisuji žádný $_POST údaj.
  if(isset($_POST['nick']) && isset($_POST['msg']) && isset($_POST['captcha'])){
    if(!empty($_POST['msg'])){
      $MessageHistory = $_POST['msg'];
      if(!empty($_POST['nick'])){
        $NickHistory = $_POST['nick'];
        if(!empty($_POST['captcha'])){
          if(!empty($_COOKIE['captcha'])){
            if(/* kontrola - porovnavani captcha */){
              if(!$Registered) $nick = mysql_real_escape_string(htmlspecialchars($_POST['nick']));
              else $nick = $Nickname;
              if(/* kontrola - neni spam? */){
                $msg  = mysql_real_escape_string(htmlspecialchars(substr($_POST['msg'],0,500)));
                $ip   = $_SERVER['REMOTE_ADDR'];
                $MySQL->Query("INSERT INTO TabulkaXXX (ID,Time,Nick,Message,Registered,AccID,IP) VALUES(0,UNIX_TIMESTAMP(),'$nick','$msg',$Registered,$AccID,'$ip')");
                $MessageHistory = "";
              }
              else $Error = "Příspěvek je podezřelý na spam.";
            }
            else $Error = "Chybně opsaný kód z obrázku.";
          }
          else $Error = "Platnost kódu vypršela. Opiš kód znovu.";
        }
        else $Error = "Opiš kód z obrázku.";
      }
      else $Error = "Zadej nick.";
    }
    else $Error = "Zadej zprávu.";
  }
  
  $MySQL->Query("SELECT * FROM TabulkaXXX ORDER BY ID DESC");
  if($MySQL->NumRows()){
    $MySQL->FetchObject();
    $fetch = $MySQL->GetFetchedObj();
    echo "<table style='background:#181818;width:100%;' cellspacing='1' cellpadding='2'>";
    for($i=0;is_object($fetch->{$i});$i++){
      $obj = $fetch->{$i};
      $time1 = Date("d.m.Y",$obj->Time);
      $time2 = Date("H:i:s",$obj->Time);
      $time = "$time1&nbsp;$time2";
      $nick = $obj->Nick.":";
      if($obj->AccID && $obj->Registered) $nick = "<span style='color:#9D5027;font-weight:bold;' title='Registrovaný uživatel'>$nick</span>";
      $bg = $i%2 ? "background:#252525" : "background:#3a3a3a";
      echo "<tr valign='top' style='$bg;'><td style='width:150px;'>$nick<br><b>[$time]</b></td><td style='word-break: inherit;'>{$obj->Message}</td></tr>";
    }
    echo "</table>";
  }
  else echo "<b>Není zde žádný příspěvek.</b>";
shaggy ten kód byl hlavně tobě, protože se mě snažíš pořád přesvědčovat o něčem, v čem pravdu nemáš.

Děláte ze mě nějakého začátečníka - Což už nějakou dobu nejsem.

EDIT: Jo aha už vím o co vám jde. Používám Historii poslední věty co kdo napsal, když udělá nějakou chybu. Tu neescapuji, je to zbytečné. Rozhodí se to jen u uživatele, na web se to nedostane. Což si můžete zkusit sami.

EDIT2: No dobře, kvůli vám jsem tam hodil htmlspecialchars. Je to sice absolutně zbytečné, protože webu to nijak neublíží, ale dobře. Jen příště si to ověřte pořádně než začnete křičet, že tam mám údajnou XSS díru, která neubližuje webu ale jen vašemu zobrazení stránky. To už pak není XSS díra. Jen jste si hráli. Je to jak přidat si vlastní skript na stránku a pozměnit údaje (které uvidíte jen vy a nikdo jiný).
shaggy
Profil
TomasJ:
A môžem vedieť, prečo ten kód posielaš mne? Ja som nikde nepísal o XSS zraniteľnosti, ani sa tu s tebou nehádam.
Iba ti ukazujem, že si začiatočník a preto mi príde nezmyselné zaoberať sa niečim, čo nemáš šancu dobre naprogramovať (ochrana proti DoS, ktorú si sám spomenul a vyzdvihol v prvom príspevku).
Jediné, o čom sa ťa snažím presvedčiť je, že používať htmlspecialchars pri ukladaní do DB je nezmysel (zhodou okolností sa to práve rieši v druhom vlákne).

EDIT2: No dobře, kvůli vám jsem tam hodil htmlspecialchars. Je to sice absolutně zbytečné, protože webu to nijak neublíží, ale dobře.
Vidíš a pritom stačí mať htmlspecialchars iba pri výpise.
TomasJ
Profil
shaggy:
Vidíš a pritom stačí mať htmlspecialchars iba pri výpise.
Nestačí a je to blbé.

Proč blbé: Jak jsem již psal... Kdyby se někdo ptal, proč používám htmlspecialchars už na vstup a ne na výstup, je to proto, abych případně v MySQL adminovi mohl upravit příspěvek (zvýraznit, ...).
Z toho vyplývá, že si prostě v tabulce natvrdo ručně změním text "abcd" na "<b>abcd</b>" a očekávám, že bude tučný.

Proč nestačí: Historie zprávy nemá s ošetřením výstupu nic společného, takže bych musel ošetřovat obojí zvlášť, tak jak jsem to dal teď.

Začátečník v tomhle směru podle mě nejsem, protože vím, co ta funkce znamená a vím kde ji použít (kde to cenu má) a kde ne.

Proč ten kód byl tobě: Cituji tebe... Keby si htmlsecialchars nepoužíval pri ukladaní do db, ale až pri výpise, nič také by sa ti nestalo. On to "rozbil" jednoducho tak, že do textarea dal napr. takýto kód...
A z toho důvodu jsem ti ukázal že je nemožné, aby se do DB dostal nebezpečný kód, který ublíží. Co si uživatel vpíše u sebe, je mi jedno. To je jak hrát si s vkládáním svých skriptů na cizí stránky. Nic jim neuděláš, pokud neprolomíš jejich zabezpečení.

Toto jsem ale vůbec nechtěl v tomto vlákně řešit - nakonec se stejně ukázalo, že ona zmíněná chyba je (kvůli vám už jen byla) neohrožující. Nemusel jsem ji napravit a bylo to naprosto zbytečné. Jen se nechci hádat, jestli to je či není XSS díra, která ohrožuje...

A není to tam žádná diskuse, takže není třeba dávat možnost všem formátovat písmo.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: