Jump to content
php.lv forumi

maksas programu skrips


test2

Recommended Posts

Tātad nesen ievadzējās tādu kodu, nē kods kad nebūs tas pareizākais skaidrojums man vajag ideju, piemēram man ir līgums ar kkādu sms serveri, cilvēks pasūta sms kā pēc defulta viņam atnāk kods un tad sākas mans skripts piemēram viņš izvēlas progu, kuru lejupielādēs, un tad nu sākam, piemēram,

ja kods sakrīt (ko pircējis saņēma caur sms), viņam izlec kkāds logs un viņš var lejupielādēt programu, bet man vajag ko tādu, kas pasargātu to noteikto progu, kādam ir kādas idejas? sākumā ideja pavisam prasta saitaisīt kkādus desmit dirus un tad desmitajā iebāzst to progu "/dblassaaf/vdgasdgd/gsagds/asgsg/asgas/agds/prga.exe" apmr šādi, tas būtu pietiekami droši? Manuprāt kkāds ļēvais variants takā palīdziet!

 

 

ā nupatās radās ideja, nevar tā piemēram failus izņemt to webservera main dira, respektīvi www un ielikt iepriekšējā public_html,

tad jūzeris var viņām tikt klāt?

Edited by test2
Link to comment
Share on other sites

Atkarīgs kā to realizē ja tev ir <a href="/dblassaaf/vdgasdgd/gsagds/asgsg/asgas/agds/prga.exe">download</a>, tad drošības tur pilnīgi nekādas :)

 

iesaku uztaisīt tādu kā download menedžeri, vispirms ievada kodu, ja kods sakrīt tad parādam pogu kur redzama download poga ar linku: <a href="download.php?fileId=5123&smsCode=ham3r">download</a>. tad download php nosaki vēlreiz pārbaudi vai kods ir pareizs, ja nav tad iedod kādu smagu video lai zin kā hakot :) bet ja ir tad pēc pēc faila id sameklē datubāzē attiecīgā faila mime/type un reālo atrašanās vietu, izsūti attiecīgos Content-type headerus un location pasniedz failu.

 

upd: netiks klāt! Var caurs ftp or smth...

Edited by Vebers
Link to comment
Share on other sites

Neizsauc to download logu. Bet vienkārši tam download.php failā ja kods ir pareizs izsūti headerus.

 

 

Content-type: application/pdf
Location: http://files.mysite.com/readers/pdf/foxit.exe

 

Ar headeriem varu kļūdīties bet domai vaidzētu būt skaidrai

Link to comment
Share on other sites

tā ok skaidrs, man piemēram, pašlaik uz testa skripta ir šādi:

if($kods = $_POST['code']) {
header("Location: $row['link']");
}

es domāju tieši tas header, to koda pārbaudi vnk šitādu uzliku nepievērsiet uzmanību

tas ir pietiekami droši?

Edited by test2
Link to comment
Share on other sites

Ir stulbi likt pilno faila adresi ieksh $_GET, jo tādā veidā jau uzreiz parādi kur ir pats fails. Tādā veidā nekad neatturēs failu lejupielādēt lietotājam otru reizi vai iedot pilno linku draugiem, kuri bezmaksas lejupielādēs failus un tava kompānija / firma cietīs zaudējumus :)

 

ieksh $_GET['file'] vari norādīt tikai faila ID (attiecīgi to kas glabājās datubāzē kā primary ID! :)

Link to comment
Share on other sites

Nu imho es jau tev visu idejiski esmu priekšā uzrakstījis un pat ļoti saprotami!! paskaties vēlreiz 4.postu.

 

Tie ūberļoģiskie šiti nemaz neizskatās ka būtu loģiski priekš tevis.

 

Piemers ja links ir download.php?id=124&code=1254fasf2

$r = mysql_query("select code from sms_codes where code = '".mysql_real_escape_string($_GET['code'])." and used <> 1'");
$res = mysql_fetch_assoc($r);

if(!empty($res)) {
$q = mysql_query("select location, mime_type from files where id = ".intval($_GET['id']));
$data = mysql_fetch_assoc($q);

mysql_query("update sms_codes set used = 1 where code = ".mysql_real_escape_string($_GET['code']));

header("Content-type: ".$data['mime_type']);
header("Location: ".$data['location']);


} else {
echo 'code already used';
}

 

Tiesa gan ar headeriemk varu kļūdīties, bet doma skaidra. un ja ne tad paskaties kādu download menedžera skriptos, tur 100% atradīsi to ko meklē.

Link to comment
Share on other sites

Header("Location: ..."); ir parasts http headeris 302 (REDIRECT) kas padod Location parametru līdz ar to vienkārši redzams...

 

Attiecīgi ja netiek veiktas nekādas manipulācijas (fails dzēsts/movots utt) un fails atrodas webroota var neatkarīgi vilkt kaut vai 100 reizes un ir pofig ka kaut kāds skrips ir updeitojis SQL tabulu, jo "header("Location: ".$data['location']);" jāatgriež fiziska faila lokacija..

 

 

Taču iespējams taisīt savādāk:

1. Ar to pašu php nevis taisīt header() bet gan ar readfile() ( http://lv.php.net/manual/en/function.readfile.php ) vai file_get_contents() pa taisno gāzt no php (fiziski fails var atrasties ārpus webroota)..

2. Lai nebūtu jātransfērē fails ar php (kas pēc idejas ir diezgan resursprasīgi) praktiski visiem webserveriem ir tā saucāma X-Sendfile fīča - kur ar php iespējams veikt kaut kāda veida autorizāciju / pārbaudi taču pašu failu sendot ar webserveri sūtīšanas mehānismu: Apache http://tn123.ath.cx/mod_xsendfile/ lighttpd un nginx sendfile ir iebūvēts..

 

Lightam un nginxam ir vēl pāris iespējas aka mod_trigger_b4_dl http://trac.lighttpd.net/trac/wiki/Docs%3A...rBeforeDownload vai mod_secure_download bet nu tākā taisies ar biznesu nodarboties nebūtu tākā korekti visu uz paplātes pasniegt :)

Link to comment
Share on other sites

×
×
  • Create New...