Safe URI Datatransport and event-driven PHP programming

Zo beneden, zo boven...
AJAX heeft alles te maken met transport van data, en de data kan van veel verschillende bronnen afkomstig zijn in een produktieomgeving met een grote codebase.

Daarom is het essentieel bij te houden van welke bron (sender) de data van afkomstig is en of de afzender en data legitiem zijn.

Ik heb een workflow ontwikkeld waarbij de data als een event-object wordt doorgegeven, en als verificatie wordt o.a een hash meegestuurd.
De identifiers en rangordenummers van de senders zijn bekend op de server, evenals de dataformats. Op deze manier is het zeer moeilijk om malafide data te injecteren of om data te kopieëren, en wordt een "Man-in-the-middle attack" onmogelijk gemaakt.

Afhandeling events op de server :

De PHP code initieert een eventhandlerobject dat het eventobject doorgeeft naar het juiste action-object, na verificatie via het Secure Tranfser Object.

Het action-object onderneemt na ontvangst van het event-object de bedoelde acties.

Het Secure Tranfser Object is verantwoordelijk voor versleuteling van de data-objecten die worden uitgewisseld tussen client en server.


Naar SafeURI TestSuite




Voorbeeld van een eenvoudige PHP handler :

<?php 

$handler = new $objEventHandler;

$event=$handler->catch64Event('json','raw');

$handler->process();

?>
			

De opbouw van de eventhandler op de server is equivalent aan die van de client



De opbouw van het JSON event object kan zijn als volgt :

{   "sender"       : "application_saveData",    //  format : {namespace}_{function}
    "action"       : "saveToTable",
    "data"         : {  "field1"      : "data1",
                        "field2"      : "data2",
                        "field3"      : "data3",
                        "field4"      : "data4",
                        "field5"      : "data5"
                      },
    "hash"         : 2930249b7064f88550bfb5702263e66d   //dataverification
}
		




Testsuite datatransport en objectconversie

Voorbeeld van conversie :

    {testobject1} => object2url => {URI component} //object2url converteert alleen objecten met dimensie 1
        Action : [toggle in/out]
    URI component => url2object => {output object}

    {testobject1} => object2url util => {output JSON string} => base64encode => md5 via de client	
                                    |=> {output JSON string} => base64encode => outputbase64decode [server]
                                    |=> {output JSON string} => base64encode => md5 hash via de server
                                    |=> {output JSON string} => base64encode => send output to server//XHR   
		    

invoer van event object:

resultaat:


  • Actions






  • Verdere actions



 Object naar string
 invoer => resultaat venster



 string naar object
 invoer => resultaat venster





 encoding/decoding, encryption
 van resultaat venster










 md5 hash
 van resultaat venster, uri codering








 XHR resultaat venster => server





 XHR invoer venster => server

 resultaat venster => HTML encode and decode




Encode Method:
Entity
Numeric
 Server


 Client




Testformulier

Voorbeeld van object transfer via URI component :

    [output Form as base64 encoded] => {base64 encoded string} => base64decode => URI decode => {JSON string}
		


  • Zowel de client als de server genereren een hash, alleen als beide hash-values overeenstemmen wordt er serverside actie ondernomen.