Jump to content
php.lv forumi

2easy

Reģistrētie lietotāji
  • Posts

    1,980
  • Joined

  • Last visited

Everything posted by 2easy

  1. vnm būs cilvēki, kas domās savādāk nekā Tu. vari viņus saukt par sienām :D
  2. nesen uzrakstīju skriptu, kur db glabājas ārējo linku un downloadojamo failu statistika (clicks) http://php.lv/f/topic/15289-linka-counteris/page__view__findpost__p__117812 tas gan nav tieši tas pats, kas tev vajadzīgs, taču varbūt, ka noder kāda ideja tikai nesaki, ka tev ar tas nestrādā :D
  3. endrju, laikam tas saucās "karma". sāki kritizēt kādu, un tūlīt uzrodas 3x citi, kas metās virsū tev pašam :D:D:D neviens neko nebūtu teicis, ja tu savādākā tonī būtu uzskaitījis nepilnības tajā lapā. bet Tava intonācija bija pārāk lecīga. nju ok, bišķīt jau var paņirgāties, bet līdz zināmai robežai kr4 neviens šeit tev nepiesienas par saturu, ko Tu uzrakstīji postā #2, bet gan par tavu attieksmi... tipa "haha, rekā jūs neko nerubījat, re kādi jums tur gļuki, haha, attīstaties...". normāli white hackeri vsp, ja kādā lapā atklātu security problēmas, vispirms pabrīdinātu lapas īpašnieku un tikai tad apsvērtu, vai ir vērts to izbazūnēt pa visu pasauli ;)
  4. bubu, tev taisnība! sākot no 53bit sākas prikoli :D function ev($v) {echo (is_bool($v) ? ($v ? 'true' : 'false') : gettype($v) . ':' . $v) . '<br />';} // echo val ini_set('precision', 20); // pow(2, 40) +/-1 ev((float) 1099511627775); // double:1099511627775 ev((float) 1099511627776); // double:1099511627776 ev((float) 1099511627777); // double:1099511627777 // pow(2, 50) +/-1 ev((float) 1125899906842623); // double:1125899906842623 ev((float) 1125899906842624); // double:1125899906842624 ev((float) 1125899906842625); // double:1125899906842625 // pow(2, 55) +/-1 ev(36028797018963967); // integer:36028797018963967 ev(36028797018963968); // integer:36028797018963968 ev(36028797018963969); // integer:36028797018963969 ev((float) 36028797018963967); // double:36028797018963968 ev((float) 36028797018963968); // double:36028797018963968 ev((float) 36028797018963969); // double:36028797018963968 // pow(2, 60) +/-1 ev(1152921504606846975); // integer:1152921504606846975 ev(1152921504606846976); // integer:1152921504606846976 ev(1152921504606846977); // integer:1152921504606846977 ev((float) 1152921504606846975); // double:1152921504606846976 ev((float) 1152921504606846976); // double:1152921504606846976 ev((float) 1152921504606846977); // double:1152921504606846976 ev(1152921504606846975.0); // double:1152921504606846976 ev(1152921504606846976.0); // double:1152921504606846976 ev(1152921504606846977.0); // double:1152921504606846976 // neskatoties uz to, salīdzināšana joprojām ir "pareiza" ev(1152921504606846975 == 1152921504606846975.0); // true // tagad gan vairs ne ^^ ev((string) 1152921504606846975 == (string) 1152921504606846975.0); // false es to pamanīju tikai tad, kad gribēju notestēt qn() kaujas apstākļos (uz mysql bigint) izrādījās, ka kaut arī salīdzināšana ar tādu pašu int ir true, taču outputojot uz string/file tā vērtība "apaļojas" (kverijā nokļūst nepareiza vērtība). tb šajā brīdī tad beidzot pakāšas tie zīmīgie cipari/biti kārtējo reizi apstiprinās tas, ka viss ir jātestē ;) viens tests neko nedeva, bet cits jau atklāja gļukus... update... function qi($i) {return is_null($i) ? 'NULL' : preg_replace('/[^\d-]/', '', $i);} // query int val - sagatavo big integer (over 32bit) for mysql query function qn($n) {return is_null($n) ? 'NULL' : (float) $n;} // query num val - sagatavo skaitli for mysql query function qs($s) {return is_null($s) ? 'NULL' : "'" . mysql_real_escape_string($s) . "'";} // query str val - sagatavo tekstu for mysql query function go($sSql) { // mysql query ar error reportingu $h = mysql_query($sSql) or die('<b>mysql error ' . mysql_errno() . ':</b> ' . mysql_error() . '<br /><b>query:</b> ' . substr($sSql, 0, 1000)); return $h; } ini_set('precision', 20); go('DROP TABLE IF EXISTS t'); go('CREATE TABLE t (i bigint) ENGINE=MyISAM'); go('INSERT t (i) VALUES ' . '(1152921504606846975),' . // ar šo vērtību viss ok '(' . qn(1152921504606846975) . '),' . // šeit notiek "apaļošanās" '(' . qi(1152921504606846975) . '),' . // tagad atkal viss ok '(123.0000000000)' // specially for endrju ;) ); $h = go('SELECT * FROM t'); while ($r = mysql_fetch_object($h)) echo $r->i . '<br />'; /* 1152921504606846975 1152921504606846976 1152921504606846975 123 */ un hai liek galā, cik nulles grib (kaut vai 10) :D:D:D
  5. bubu, es nomainīju uz 1152921504606846975, kā tu teici, un viss bija tieši tāpat... kr4 it works! np tieši tāpēc es cenšos pēc iespējas pārbaudīt/izpildīt pat samērā vnkāršu kodu, jo šad tad tas ko teorētiski iedomājos atšķiras no tā, kas ir praktiski ;) pat apskatīju šādu debug info abiem šiem skaitļiem echo decbin(1152921504606846976) . '<br />'; // 1000000000000000000000000000000000000000000000000000000000000 echo decbin(1152921504606846975) . '<br />'; // 111111111111111111111111111111111111111111111111111111111111 bet varbūt vajag savādāku testu? man vnk likās, ka ja es pēc float kasta šo vērtību salīdzinu ar sākotnējo int vērtību un tās sakrīt, tad ar to pietiek, lai secinātu, ka (float) neko nav sabojājis. varbūt tev ir kāda 64bit sistēma, kur šāds float kasts pakāš zīmīgos ciparus?
  6. paprasi savam prakses vadītājam, lai tev iemāca rakstīt if else
  7. $code = iDfilter($_POST['code']); if(isset($code)) { $key = check_result($_POST['code']); aizvieto ar if(isset($_POST['code'])) { $key = check_result(iDfilter($_POST['code'])); savādi, ka sākumā viņi izfiltrē vērtību ar iDfilter(), bet pēc tam tik un tā padot oriģinālo $_POST['code'] :D turklāt mysql_escape_string() skaitās deprecated...
  8. 1) katrā if/while/... kodu liec ar atkāpi (parasti tab - 4x atstarpes). tā vieglāk lasīt blokus, uztvert loģiku, kur kas sākas un beidzas 2) else attiecas uz tuvāko if. ja tev nupat beidzas viens iekšējais if un tu gribi, lai else attiecas nevis to, bet uz ārējo if, tad ieliec vēl vienu } if () { if () { ... } else { ... } } if () { if () { ... } } else { ... } pamanīji atšķirību? es neteikšu priekšā, bet sakārtojot kodu, tev pašam atnāks apskaidrība ;)
  9. bubu, tu mani gandrīz nobaidīji :P bet... $i = 1152921504606846976; // pow(2, 60) $n = (float) $i; echo gettype($i) . ' ' . gettype($n) . '<br />'; // integer double echo $n == 1152921504606846976 ? 'true' : 'false'; // true tests tika izpildīts uz nano.lv servera, kuram jau pēc phpinfo() pirmās rindiņas var spriest, ka tam ir 64bit cpu System: Linux if24.nano.lv 2.6.26.3-grsec #1 SMP Fri Sep 12 21:25:22 EEST 2008 x86_64
  10. tur jau tā lieta, ka labie/sliktie dati ir tikai cilvēka interpretācija. katrs konkrētais gadījums jāskatās atsevišķi, lai atšķirtu nejaušības/neuzmanības no tīšiem mēģinājumiem. kodā var tikai atlasīt aizdomīgos datus, bet to, vai tie ir ļaunprātīgi, pēc tam novērtē pats 1) aizdomīgi ir skaitļi, kas nav skaitļi ;) tur, kur jābūt skaitliskai vērtībai, pārbauda ar is_numeric(). ja tā nav, zna4it aizdomīga :P 2) teksts, kur ir apostrofs ' arī ir aizdomīgs. atjautīgi hakeri var sataisīt visvisādus stringus, kas var būt bīstami. tā ka universālu patternu, lai atpazītu injekciju, nav nemaz tik viegli uztaisīt šīs pārbaudes veic pirms pieprasījuma/formas apstrādes uz $_GET/$_POST parametriem. un aizdomīgās vērtības labāk saglabā savā log failā. ja nu kāds tomēr pamanās nonest db, tad tā arī neuzzinātu, no kurienes nāca injekcija ;) ja vien webservera log failos ir arī post dati
  11. http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html bik paskrollējot uz leju, jau pirmais piemērs ir par laika intervālu
  12. vnk ņem tuvākās 60 dienas, nevis tuvākās šī gada 60 dienas :D
  13. nav jau obligāti kkur jāliek atsevišķs js fails. tur pat tajā "handlerī" aiz header(), kad php beidzas, ieliec js oo dinamiskais .htaccess :D:D:D tiešām 3:30 cienīga ideja ;) njaa var jau pēc admin logina taisīt .htaccess overwrite ar Allow from admin-ip kāpēc gan ne ;) htaccess var tikai tik, cik tas ir uztaisīts, lai tas varētu ;) http://httpd.apache.org/docs/2.0/mod/mod_access.html
  14. tas jau notiek automātiski (serveris tā arī "droši atbild ar 304", ja nav izmaiņu). vienīgais, ko te vēl var nooptimizēt, ir pateikt serverim, lai pie šiem headeriem tas nemaz nečeko to failu. taču tad ir jābūt super noslogtam serverim, lai būtu vērts to atslogot no šāda sīkuma tā jau hipotēze ir pareiza sākotnējais jautājums/pieņēmums gan ir savāds, jo normāli browseris pirmajā requestā neiekļauj šos headerus. bet pat ja iekļautu, tad tam pašam vajadzētu izgudrot savu mistisku last-modify datumu un/vai etagu
  15. Labvakar! :) ja jau baigi vajag atļaut tikt pie js tikai adminam <?php if (!$bAdmin) exit; // tikai kkur dabū to $bAdmin - bool ir/nav admins header('Expires: ' . gmdate('D, d M Y H:i:s', mktime(date('H'), date('i'), date('s'), date('m'), date('d'), date('Y') + 1)) . ' GMT'); header('Content-Type: application/x-javascript'); ?> tavs js goes here... šādi padodot js/css, lieku klāt arī future expires headeri, lai mazāks trafiks. jaunāku versiju var forsēt, nomainot uri, piemēram, ?v123 var arī ar .htaccess atļaut piekļūt tikai no admina ip, ja tāda ir zināma
  16. hmm, dažreiz ir veselīgi izlikties, ka kko nezini. lai citi smejās. tā var pats sevi pārbaudīt, vai esi iedomīgs un apvainojies, vai nē. tas vnk tāds elastības vingrinājums pret iedomības stīvumu un savā ziņā arī psiholoģiskā aizsardzība ;) vsjo, tgd gan atnāks bubu un iemetīs mūs offtopikā :D:D:D
  17. hahaha bumbulītis <---- ievērtē title :D:D:D
  18. izskatās, ka psiholoģiski tev ir vēl vairāk ievainojamības nekā MySQL un IPB kopā ņemot :D:D:D un turpini piesieties par sīkumiem... relax taču! šis ir izklaidējoši informatīvs forums. te var gan kko jaunu iemācīties, gan ierēkt par to, ko kāds nezin. enjoy ;)
  19. tpc, ka tas atšķirībā no konstantes nav superglobal man liekas, ka cibiņam tur ir kāda vnkārša kļūda, jo normāli nav nekādu problēmu nodefinēt konstanti, tās vērtību ņemot no mainīgā
  20. imho, tu centies izdarīt kko nesaprotamu :D vai kā minimums kko lieku...
  21. varētu jau tīri intereses pēc logot injekciju mēģinājumus, lai pēčāk paskatītos, kā hakerīši cenšas kko izdarīt :D
  22. varbūt tu mēģini vēlreiz nodefinēt to pašu konstanti? tas gan neies cauri. konstante nav nekāds mainīgais. 1x uzstāda un tā arī paliek
  23. latviski saka "injicēt", nevis "injekcēt" :P
×
×
  • Create New...