| PHP XML API service | ||
|---|---|---|
| _Dejan_1. sep 2011 13:51:34Pridružen od: 16. jun 2010 268 objav +188-222 | #1Pozdravljeni, Potreboval bi malo pomoči oz. predlogov glede izdelave custom API-ja ki komunicira z mysql bazo in se nahaja na cpanel shared hostingu... Na ta API se bodo povezovale custom embedded naprave: 72 MHz 32-bit ARM 7 Processor 16MB RAM and 4.5MB FLASH GPRS/3G Modem Ker nisem nikoli ničesar programiral v php-ju bi vas prosil če preverite primer kode in poveste kaj ni ok oz. kaj bi vi spremenili... XML ki bi ga naprava poslala za prijavo v sistem bi bil: <?xml version='1.0' encoding="iso-8859-1" ?>Koda login skripte pa bi izgledala takole: <?phpResponse bo XML dokument ki izgleda takole: <?xml version='1.0' encoding="iso-8859-1" ?>Torej kaj bi vi spremenili in zakaj? Kje sem ga lomil? Za kakršnokoli pomoč vam bom hvaležen. všeč(0)ni všeč(0)spam(0) | |
| _Dejan_2. sep 2011 07:54:37Pridružen od: 16. jun 2010 268 objav +188-222 | #2hm ali nihče ne zna pomagati svetovati kako naj se lotim zadeve oz. ali je tak način ok? Ker ne morem urejati prvega posta bom dodal kodo v kateri sem v večini primerov "preprečil" SQL Injection me pa zanima ali je smiselno dodati še stripslashes() preden kličem mysql_real_escape_string() ??? Nova koda: <?phpvšeč(0)ni všeč(0)spam(0) | |
| Roky2. sep 2011 08:12:20Pridružen od: 9. apr 2008 1879 objav +1475-17783 | #3Ne razumem sploh kje je težava. Iščeš koncept ... ali ti dejansko kaj ne dela? všeč(0)ni všeč(0)spam(0) | |
| _Dejan_2. sep 2011 08:24:42Pridružen od: 16. jun 2010 268 objav +188-222 | #4 Roky: V bistvu zadeva dela, zanima me predvsem če sem glede security-a kje mimo vsekal in je skripta potencialno nevarna, oz. če sem kje kaj spregledal in bo zadeva požirala preveč resoursev. Z 1 clientom to ne morem testirat, ko pa bo laufalo na produkcijskem strežniku in gor 100-200 naprav pa je tudi težko narediti kakšne večje spremembe :) všeč(0)ni všeč(0)spam(0) | |
| Roky2. sep 2011 09:16:09Pridružen od: 9. apr 2008 1879 objav +1475-17783 | #5#1 Validacija Naredi dodatno validacijo, v smilu intval tam kjer veš da je integer, regex kjer veš da je mac address itd. $mac_address = mysql_real_escape_string($request_xml->mac_address);#2 Pri prvem blogu kar dobiš noter HTTP RAW POST XML. Kako pa veš, da ni kakšen čudn xml? Raje ga prej preveri validateXMLFile($xmlString) {if ($validationStatus !== true) {Ostalo je kul. všeč(+2)ni všeč(0)spam(0) | |
| blackmamba2. sep 2011 09:30:59Pridružen od: 4. mar 2008 307 objav +163-101 | #6Lahko bi uvedel kak error reporting sistem, vsaj za beleženje mysql napak. Pri "UPDATE DEVICES" manjka $ pred hw_version hw_version='" . hw_version . "'Poglej si še mysql_free_result.Kako pogosto naprave pošiljajo requeste, boš vedel ti. Če vsaka naprava naredi request 1x na dan ali 1x na sekundo je razlika več kot občutna :) Če te skrbi, pripravi testno okolje in simuliraj 500 naprav. (mogoče ab) edit: in tako kot pravi Roky: dodatna validacija regex in intval()! LP nazadnje urejal blackmamba 2. sep 2011 09:33:31 všeč(+3)ni všeč(0)spam(0) | |
| _Dejan_2. sep 2011 10:43:23Pridružen od: 16. jun 2010 268 objav +188-222 | #7Hvala obema za odgovore. 1.)Kar se tiče validacije sem v kodo dodal funkcije za validacijo: function validate_macaddress($val)In nato spremenil validacijo spremeljivk: $mac_address = mysql_real_escape_string(validate_macaddress($request_xml->mac_address));2.)Bom dodal preverjanje XML-ja. 3.)Sem popravil manjkajoči $ v query-u in na koncu predno zaprem bazo dodal mysql_free_result(). 4.)login requestov bo zelo malo oz. samo takrat ko bo naprava izgubila povezavo s strežnikom ali se resetirala. Bodo pa še drugi requesti in sicer pošiljanje statusa naprave ki bo vsakih 10-30s(Odvisno od konfiguracije) in pa pošiljanje statusa modula priklopljenega na napravo(max. 4 moduli) vsakih 5-20sekund. dosti manjši interval pomoje itak ni možen zaradi samega pinga gprs/3g omrežja :) Ti xml-ji bodo tudi malo večji kot login ker bodo vsebovali več podatkov... všeč(0)ni všeč(0)spam(0) | |
| _Dejan_2. sep 2011 12:43:09Pridružen od: 16. jun 2010 268 objav +188-222 | #8@Roky: Sem šele zdele opazil glede validateXMLFile ... v kodi že preverim če je struktura XML-ja pravilna: try {Če pogledaš sem imel to narejeno v drugem postu... tako da trenutna koda izgleda takole:<?phpnazadnje urejal _Dejan_ 2. sep 2011 12:57:31 všeč(0)ni všeč(0)spam(0) | |
| Roky2. sep 2011 16:37:25Pridružen od: 9. apr 2008 1879 objav +1475-17783 | #9Aha, OK, pol je pa to to. všeč(0)ni všeč(0)spam(0) | |
| _Dejan_28. nov 2011 14:35:31Pridružen od: 16. jun 2010 268 objav +188-222 | #10Imam še eno vprašanje in sicer preko socketa pošljem serverju request: POST /API/ HTTP/1.0Vendar ne dobim pravilne povratne informacije. Od serverja dobim: HTTP/1.1 200 OKTorej brez "Content-Length:" in vsebine. Preko Firefox REST Clienta dela BP. Kakšna ideja kaj je narobe v mojem requestu? všeč(0)ni všeč(0)spam(0) | |