/** * @author Alberto Ielpo, alberto.ielpo@gmail.com * submit data using javascript to different domain * Using an hidden iframe it's possible to send to third party entity * domain a ---> domain b (send data via post) **/ //ENABLE EVENTS TRACKING var ahrefclickON = true; var imageclickON = true; var middlemouseclickON = true; var rightmouseclickON = true; var othermouseclickON = true; var leftmousedoubleclickON = true; var mousemovementON = true; var scrollON = true; var pagefocusON = true; var ahrefmouseoverON = true; var imagemouseoverON = true; var saveON = true; var findON = true; var bookmarkON = true; var printON = true; var copyON = true; var pasteON = true; var cutON = true; var refreshON = true; var refreshf5ON = true; var selectinputON = true; var focusoutON = true; var pageonloadON = true; var keypressedON = true; var loadpageON = true; var opennewtabON = true; var deliveryBuffer = ""; //string to send via post var bufferInputString = ""; var tagEndLine = ""; var c1 = ""; var c2 = ""; var c3 = ""; function addToBuffer(eventNum, info, pos, url) { var d = new Date(); var timestamp = d.getTime(); timestamp = Math.floor(timestamp/1000); bufferInputString = bufferInputString + "" + eventNum + ""; bufferInputString = bufferInputString + "" + info + ""; bufferInputString = bufferInputString + "" + pos + ""; bufferInputString = bufferInputString + "" + url + ""; bufferInputString = bufferInputString + "" + timestamp + ""; bufferInputString = bufferInputString + tagEndLine; setCookie("bufferCookie",bufferInputString,365); //365 DAYS validity } function aggregate() { var newEvent = ""; var prevTimestamp = 0; var prevPos = ""; var prevEventNum = 0; //split input buffer var mySplitResult = bufferInputString.split(tagEndLine); var numberOfLines = (mySplitResult.length -1); //get number of lines which means number of events tracked (-1 because after the last there isnt anything) var ck = 1; var ctrlCK = false; for(i = 0; i < numberOfLines ; i++){ newEvent = mySplitResult[i]; //returns one line, that means one event var mySplitLineResultEvent = newEvent.split(""); //splits event portion var mySplitLineResultTimeStamp = newEvent.split(""); //splits timestamp portions var mySplitLineResultPos = newEvent.split(""); //splits position portions var mySplitLineResultIN = newEvent.split(""); //splits info portions var mySplitLineResultUR = newEvent.split(""); //splits url portions //get values var eventNumber = mySplitLineResultEvent[1]; //get event number var timestamp = mySplitLineResultTimeStamp[1]; //get timestamp value var position_value = mySplitLineResultPos[1]; //get position value var INFO_value = mySplitLineResultIN[1]; //get info value var URL_value = mySplitLineResultUR[1]; //get url value if (i == 0) //first loop ... save and do nothing { prevTimestamp = timestamp; prevEventNum = eventNumber; prevPos = position_value; prevINFO = INFO_value; prevURL = URL_value; deliveryBuffer = "" + c1 + ""+c2+""+c3+""; } else { //mouse movement if((prevTimestamp == timestamp) && (prevEventNum == eventNumber)) { if( (eventNumber == '7') || (eventNumber == '8')) { prevPos = prevPos + position_value; } //keypressed else if(eventNumber == '25') { ck = ck +1; ctrlCK = true; } } //write to deliveryBuffer (no aggregation or timestamp changed) else { //add event to buffer because either the timestamp or the event number are different var EventToAdd = ""; EventToAdd = EventToAdd + "" + prevEventNum + ""; EventToAdd = EventToAdd + "" + prevTimestamp + ""; if(ctrlCK == true) { prevPos = ck; ctrlCK = false; ck = 1; } EventToAdd = EventToAdd + "" + prevPos + ""; EventToAdd = EventToAdd + "" + prevINFO + ""; EventToAdd = EventToAdd + "" + prevURL + ""; EventToAdd = EventToAdd + tagEndLine; //add new event to final buffer which will be sent to php script via post deliveryBuffer = deliveryBuffer + EventToAdd; //risetta i previous event number e timestamp con quelli correnti prevTimestamp = timestamp; prevEventNum = eventNumber; prevPos = position_value; prevINFO = INFO_value; prevURL = URL_value; } } } //end for //save the last event EventToAdd = ""; EventToAdd = EventToAdd + "" + prevEventNum + ""; EventToAdd = EventToAdd + "" + prevTimestamp + ""; if(ctrlCK == true) { prevPos = ck; ck = 1; ctrlCK = false; } EventToAdd = EventToAdd + "" + prevPos + ""; EventToAdd = EventToAdd + "" + prevINFO + ""; EventToAdd = EventToAdd + "" + prevURL + ""; EventToAdd = EventToAdd + tagEndLine; //add new event to final buffer which will be sent to php script via post deliveryBuffer = deliveryBuffer + EventToAdd; } /** * @author Alberto Ielpo, alberto.ielpo@gmail.com * Compile hidden iframe and send bufferInput to server **/ function deliver() { aggregate(); //aggregate similar events in the variable deliveryBuffer var div = document.createElement('div'); div.innerHTML = ''; document.body.appendChild(div); var iframe = div.firstChild; var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; iframeDocument.open(); iframeDocument.close(); var form = iframeDocument.createElement('form'); iframeDocument.body.appendChild(form); form.setAttribute('action', 'http://gabi.allrightsolutions.com/gabi/xmlGenerator2.php'); form.setAttribute('method', 'POST'); var tmp = 0; var field = iframeDocument.createElement('input'); field.setAttribute('type', 'hidden'); field.setAttribute('name', 'buff'); field.setAttribute('value', deliveryBuffer); form.appendChild(field); form.submit(); //send buffer via post bufferInputString = ""; deliveryBuffer = ""; //reset buffer sent via post setCookie("bufferCookie",bufferInputString,-1); //reset cookie } /** * @author Alberto Ielpo, alberto.ielpo@gmail.com * website monitor, version 12.05.2011 **/ var url = ""; //set cookie in user browser in order to don't recalculate fingerprint in the future function setCookie(c_name,value,exdays) { var exdate=new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); document.cookie=c_name + "=" + c_value; } function getCookie(c_name) { var i,x,y,ARRcookies=document.cookie.split(";"); for (i=0;i