[plonegov-br] Barra Gov e coleta de estatísticas do SERPRO
Charles Henrique
charleshenrique em pgr.mpf.gov.br
Sexta Fevereiro 28 16:54:45 BRT 2014
Nunca precisei usar nenhum componente do PloneGov e/ou afins, mas se eu
precisar observarei o código fonte antes de usar. Agradeço pela
observação do colega Bruno.
Eis o código do barra.brasil.gov.br/barra.js formatado.
__serpro_estatisticas_corporativa__ = __srp_est_corp = {
carregado: false,
idUsuario: "",
idVisita: "",
constantes: {
dominioGIFTransparente: "coletajavascript.serpro.gov.br/",
caminhoGIFTransparente: "default.aspx",
parametros: {
dominio: "dominio",
infoMonitor: "monitor",
sistemaOperacional: "so",
navegador: "navegador",
plugins: "plugins",
evitarCache: "_",
versao: "versao",
novaVisita: "novavisita",
novaVisitaDia: "novavisitadia",
novaVisitaMes: "novavisitames",
novaVisitaAno: "novavisitaano",
userId: "userid",
origem: "origem",
horaAcesso: "horaacesso",
horaSaida: "horasaida",
visitaId: "visitaid",
termoBuscaExterna: "termo"
},
versao: "4.0"
},
obterDominio: function (url) {
if (!url) return null;
var matches = url.match(/:\/\/([0-9a-zA-Z\.\-:]+)/);
return matches ? matches[1] : null
},
obterCaminho: function (url) {
if (!url) throw new Error("URL n\u00e3o pode ser vazia nem nula.");
var re = new RegExp("\\S+?://\\S+?(/[^?]*)"),
partes = re.exec(url);
return partes ? partes[1] : "/"
},
obterDominioAtual: function () {
return document.location.host || document.domain
},
obterProtocolo: function () {
var protocolo =
window.location.protocol || location.protocol;
return protocolo !== "https:" ? "http:" : protocolo
},
gerarGuid: function () {
var S4 = function () {
return ((1 + Math.random()) * 65536 |
0).toString(16).substring(1)
};
return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-"
+ S4() + S4() + S4()
},
concatenarQueryStrings: function (qs1, qs2) {
return qs1 && qs2 ? qs1 + "&" + qs2 : qs1 || (qs2 || "")
},
agendarParaExecutarAoConcluirCargaDOM: function (callback) {
var DOMContentLoaded, toplevel = false;
if (document.addEventListener) DOMContentLoaded = function () {
document.removeEventListener("DOMContentLoaded",
DOMContentLoaded, false);
callback()
};
else if (document.attachEvent) DOMContentLoaded = function () {
if (document.readyState === "complete") {
document.detachEvent("onreadystatechange",
DOMContentLoaded);
callback()
}
};
function doScrollCheck() {
if (__srp_est_corp.carregado) return;
try {
document.documentElement.doScroll("left")
} catch (e) {
setTimeout(doScrollCheck, 1);
return
}
callback()
}
if (document.readyState === "complete") callback();
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", DOMContentLoaded,
false);
window.addEventListener("load", callback, false)
} else if (document.attachEvent) {
document.attachEvent("onreadystatechange", DOMContentLoaded);
window.attachEvent("onload", callback);
try {
toplevel = window.frameElement === null
} catch (e) {}
if (document.documentElement.doScroll && toplevel)
doScrollCheck()
}
},
obterDataCookieDuracao: function (agora) {
agora = agora || new Date;
return new Date(agora.setMinutes(agora.getMinutes() + 30))
},
obterDataInicioDiaSeguinte: function (agora) {
agora = agora || new Date;
var data = new Date(agora.getFullYear(),
agora.getMonth(), agora.getDate(), 0, 0, 0, 0);
data.setDate(data.getDate() + 1);
return data
},
obterDataInicioMesSeguinte: function (agora) {
agora = agora || new Date;
var data = new Date(agora.getFullYear(), agora.getMonth(),
agora.getDate(), 0, 0, 0, 0),
mesInicial = data.getMonth();
if (data.getDate() < 27) data.setDate(27);
while (mesInicial === data.getMonth())
data.setDate(data.getDate() + 1);
data.setDate(1);
return data
},
obterDataInicioAnoSeguinte: function (agora) {
agora = agora || new Date;
return new Date(agora.getFullYear() + 1, 0, 1, 0, 0,
0, 0)
},
elementoEstaNoArray: function (array, elemento) {
var i;
for (i = 0; i < array.length; i++)
if (array[i] === elemento) return true;
return false
},
adicionarSeNaoExistir: function (array, elemento) {
var estaNoArray = __srp_est_corp.elementoEstaNoArray(array,
elemento);
if (!estaNoArray) array.push(elemento);
return estaNoArray
},
diferencaArrays: function (array1, array2) {
var diferenca = [],
i, e;
for (i = 0; i < array1.length; i++) {
e = array1[i];
if (!__srp_est_corp.elementoEstaNoArray(array2, e))
diferenca.push(e)
}
return diferenca
},
adicionarElementos: function (array,
elementos) {
if (!("push" in array)) throw new TypeError("array must be an
array");
if (!("length" in elementos)) throw new TypeError("elementos
must be an array");
for (var i = 0; i < elementos.length; i++) array.push(elementos[i])
},
obterPropriedade: function (obj, propriedade, valorPadrao) {
if (!obj.hasOwnProperty(propriedade)) obj[propriedade] =
valorPadrao;
return obj[propriedade]
},
caminhoParaDomID: function (caminho) {
if (!caminho) return caminho;
var caractere, regexpPrimeiroChar = /[A-Za-z_\.\-]/,
regexpOutrosChar = /[A-Za-z_\.\-0-9]/,
id = "",
i;
for (i = 0; i < caminho.length; i++) {
caractere = caminho.charAt(i);
id += regexpOutrosChar.test(caractere) ? caractere :
caminho.charCodeAt(i).toString()
}
return regexpPrimeiroChar.test(id.charAt(0)) ? id : "_" + id
},
obterElemento: function (array, indice) {
return array[(indice < 0 ? array.length : 0) + indice]
},
eSufixo: function (s, sufixo) {
if (!s || !sufixo) return false;
return s.slice(-sufixo.length) === sufixo
},
queryStringParaDicionario: function (qs) {
if (qs.length === 0) return {};
var partes = qs.split("&"),
dic = {}, nomeValor;
for (var i = 0; i <
partes.length; i++) {
nomeValor = partes[i].split("=");
dic[nomeValor[0]] = nomeValor[1] || ""
}
return dic
},
extrairParametroQueryString: function (qs, parametro) {
if (qs === null || !parametro) throw new Error("Par\u00e2metros
n\u00e3o podem ser nulos.");
var qsDict = __srp_est_corp.queryStringParaDicionario(qs);
if (parametro in qsDict) return qsDict[parametro];
return null
},
Plugins: {
detectarPluginMimeType: function (mimeType) {
if (navigator.mimeTypes && navigator.mimeTypes.length) {
mimeType = navigator.mimeTypes[mimeType];
return Boolean(mimeType &&
mimeType.enabledPlugin)
}
return false
},
FlashDetect: {
nome: "Flash",
versao: null,
detectar: function () {
var ver = this.getSwfVer();
if (ver) {
this.versao = ver.replace("WIN ", "").replace(",",
".").split(".")[0];
return true
}
return false
},
controlVersion: function controlVersion() {
var version, axo;
try {
axo = new
ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
version = axo.GetVariable("$version")
} catch (e) {}
if (!version) try {
axo = new
ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
version = "WIN 6,0,21,0";
axo.AllowScriptAccess =
"always";
version = axo.GetVariable("$version")
} catch (e2) {}
if (!version) try {
axo = new
ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
version = axo.GetVariable("$version")
} catch (e3) {}
if (!version) try {
axo = new
ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
version = "WIN 3,0,18,0"
} catch (e4) {}
if (!version) try {
axo = new
ActiveXObject("ShockwaveFlash.ShockwaveFlash");
version = "WIN 2,0,0,11"
} catch (e5) {
version = -1
}
return version
},
getSwfVer: function () {
var userAgent = navigator.userAgent,
isIE = navigator.appVersion.indexOf("MSIE") !== -1,
isWin =
navigator.appVersion.toLowerCase().indexOf("win") !== -1,
isOpera = userAgent.indexOf("Opera") !== -1,
flashVer = -1,
swVer2, flashDescription, descArray,
tempArrayMajor, versionMajor, versionMinor, versionRevision;
if (navigator.plugins !== null &&
navigator.plugins.length > 0) {
if (navigator.plugins["Shockwave Flash 2.0"] ||
navigator.plugins["Shockwave Flash"]) {
swVer2 = navigator.plugins["Shockwave Flash
2.0"] ? " 2.0" : "";
flashDescription = navigator.plugins["Shockwave
Flash" + swVer2].description;
descArray = flashDescription.split(" ");
tempArrayMajor = descArray[2].split(".");
versionMajor = tempArrayMajor[0];
versionMinor = tempArrayMajor[1];
versionRevision = descArray[3];
if (versionRevision === "") versionRevision =
descArray[4];
if (versionRevision[0] === "d") versionRevision
= versionRevision.substring(1);
else if (versionRevision[0] === "r") {
versionRevision = versionRevision.substring(1);
if (versionRevision.indexOf("d") > 0)
versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"))
}
flashVer = versionMajor + "." + versionMinor +
"." + versionRevision
}
} else if (userAgent.toLowerCase().indexOf("webtv/2.6")
!== -1) flashVer = 4;
else if (userAgent.toLowerCase().indexOf("webtv/2.5")
!== -1) flashVer = 3;
else if (userAgent.toLowerCase().indexOf("webtv") !==
-1) flashVer = 2;
else if (isIE && (isWin && !isOpera)) flashVer =
this.controlVersion();
return flashVer
}
},
JavaDetect: {
nome: "Java",
versao: null,
detectar: function () {
return typeof navigator.javaEnabled !== "undefined" &&
navigator.javaEnabled()
}
},
GearsDetect: {
nome: "Gears",
versao: null,
detectar: function () {
return typeof window.GearsFactory === "function"
}
},
PDFDetect: {
nome: "PDF",
versao: null,
detectar: function () {
return
__srp_est_corp.Plugins.detectarPluginMimeType("application/pdf")
}
},
QuickTimeDetect: {
nome: "QuickTime",
versao: null,
detectar: function () {
return
__srp_est_corp.Plugins.detectarPluginMimeType("video/quicktime")
}
},
WMPDetect: {
nome: "WindowsMediaPlayer",
versao: null,
detectar: function () {
return
__srp_est_corp.Plugins.detectarPluginMimeType("application/x-mplayer2")
}
},
RealPlayerDetect: {
nome: "RealPlayer",
versao: null,
detectar: function () {
return
__srp_est_corp.Plugins.detectarPluginMimeType("audio/x-pn-realaudio-plugin")
}
},
SilverlightDetect: {
nome: "Silverlight",
versao: null,
detectar: function () {
return
__srp_est_corp.Plugins.detectarPluginMimeType("application/x-silverlight")
}
},
PluginDetect: {
mapaPlugins: {},
init: function () {
var i, pluginDetect, plugin, plugins =
[__srp_est_corp.Plugins.FlashDetect, __srp_est_corp.Plugins.JavaDetect,
__srp_est_corp.Plugins.GearsDetect, __srp_est_corp.Plugins.PDFDetect,
__srp_est_corp.Plugins.QuickTimeDetect,
__srp_est_corp.Plugins.WMPDetect,
__srp_est_corp.Plugins.RealPlayerDetect,
__srp_est_corp.Plugins.SilverlightDetect];
for (i = 0; i < plugins.length; i++) {
pluginDetect = plugins[i];
try {
plugin = {
disponivel: pluginDetect.detectar(),
nome: pluginDetect.nome,
versao: pluginDetect.versao
}
} catch (e) {
continue
}
this.mapaPlugins[plugin.nome] = plugin
}
}
}
},
Cookie: {
obter: function Cookie(nome) {
if (!nome || typeof nome !== "string") throw new
TypeError("Nome deve ser string n\u00e3o vazia.");
var cookies = document.cookie.split("; "),
par, i, valorCookie;
for (i = 0; i < cookies.length; i++) {
valorCookie = cookies[i];
par = valorCookie.indexOf("=") > 0 ?
valorCookie.split("=") : [valorCookie, ""];
if (nome === par[0]) return unescape(par[1])
}
return null
},
definir: function (nome, valor, expiracao) {
if (!nome || !(typeof nome === "string")) throw new
TypeError("nome deve ser string n\u00e3o vazia.");
if (typeof valor !== "string") throw new TypeError("valor
deve ser string.");
if (expiracao && !(expiracao instanceof Date)) throw new
TypeError("expiracao deve ser Date ou null.");
var valorExpiracao = !expiracao ? "" : ";expires=" +
expiracao.toGMTString();
document.cookie = nome + "=" + escape(valor) + valorExpiracao +
";path=/"
}
},
Serializador: function () {
this.regexpIdentificadorJS = /^[A-z_\$][A-z_0-9]*$/;
this.regexpValidacao = /^{.*}$/;
this.regexpsSeguranca = [/function\s*\(.*\)/, /eval\s*\(.*\)/,
/submit\s*\(.*\)/, /.\s*location\s*=/, /.\s*href\s*=/, /["\n;]/];
this.serializar = function (_obj) {
var i, key, str, len, val, parts;
switch (typeof _obj) {
case "number":
case "boolean":
return _obj.toString();
case "string":
return "'" + _obj + "'";
case "object":
if (_obj === null) return "null";
if (_obj instanceof Date) return "(new Date(" +
_obj.getTime() +
"))";
if (_obj.constructor === Array || typeof _obj.callee
!== "undefined") {
len = _obj.length;
if (len < 0) throw new TypeError("Object has
negative length: " + _obj);
else if (len == 0) return "[]";
parts = [];
for (i = 0; i < len; i++)
parts.push(this.serializar(_obj[i]));
return "[" + parts.join(",") + "]"
}
parts = [];
for (key in _obj) {
val = _obj[key];
if (typeof val === "function") continue;
parts.push(this.normalizarChave(key) + ":" +
this.serializar(val))
}
return "{" + parts.join(",") + "}";
default:
throw new TypeError("Cannot serialize object of type " +
typeof _obj);
}
};
this.recuperar = function (s) {
var obj, i;
if (!s) throw new EvalError("Null or empty object
representation: " + s);
if (!this.regexpValidacao.test(s)) throw new
EvalError("Invalid object representation: " + s);
for (i = 0; i < this.regexpsSeguranca.length; i++)
if (this.regexpsSeguranca[i].test(s)) throw new
EvalError("Insecure object representation: " + s);
try {
eval("obj = " + s)
} catch (e) {
throw new EvalError("Error when eval-ing string " + s +
" . Error: " + e);
}
if (typeof obj !== "object") throw new EvalError('Retrieved
object is not of type "object": ' +
s);
return obj
};
this.normalizarChave = function (chave) {
return this.regexpIdentificadorJS.test(chave) ? chave : "'"
+ chave + "'"
}
},
TermoBusca: {
obterTermo: function (maquinasBusca, referrer) {
var i;
referrer = referrer || document.referrer;
if (!referrer || referrer.indexOf("?") < 0) return null;
maquinasBusca = maquinasBusca ||
__srp_est_corp.TermoBusca.maquinasBuscaExternas;
if (!maquinasBusca) return null;
for (i = 0; i < maquinasBusca.length; i++) {
maquina = maquinasBusca[i];
if
(__srp_est_corp.TermoBusca._veioDaMaquinaDeBusca(maquina, referrer))
return __srp_est_corp.extrairParametroQueryString(referrer.split("?")[1],
maquina.parametro)
}
return null
},
MaquinaBusca: function (dominios, parametro,
caminhosPaginasResultadoBusca) {
this.dominios = dominios;
this.parametro = parametro;
this.caminhosPaginasResultadoBusca =
caminhosPaginasResultadoBusca || null
},
maquinasBuscaExternas: [{
dominios: ["google.com", "google.com.br", "google.pt"],
parametro: "q"
}, {
dominios: ["bing.com", "bing.com.br"],
parametro: "q"
}, {
dominios: ["search.conduit.com"],
parametro: "q"
}, {
dominios: ["yahoo.com"],
parametro: "p"
}],
maquinasBuscaInternas: [{
dominios: ["receita.fazenda.gov.br",
"161.148.231.100"
],
parametro: "Criteria",
caminhosPaginasResultadoBusca:
["/Aplicacoes/ATBHE/Busca/ResultPesq.asp"]
}],
_veioDaMaquinaDeBusca: function (maquina, referrer) {
var i, j, maquina, dominioReferrer =
__srp_est_corp.obterDominio(referrer),
caminhoLowerCase =
__srp_est_corp.obterCaminho(referrer).toLowerCase(),
dominioPertenceAMaquina = false;
for (i = 0; i < maquina.dominios.length; i++)
if (__srp_est_corp.eSufixo(dominioReferrer,
maquina.dominios[i])) {
dominioPertenceAMaquina = true;
break
}
if (!dominioPertenceAMaquina) return false;
if (!maquina.caminhosPaginasResultadoBusca) return true;
for (i = 0; i <
maquina.caminhosPaginasResultadoBusca.length; i++)
if (caminhoLowerCase ===
maquina.caminhosPaginasResultadoBusca[i].toLowerCase()) return true;
return false
}
},
QueryStringGIFEstatisticas: {
coletarDominio: function () {
var dominio = __srp_est_corp.obterDominioAtual();
return dominio ?
__srp_est_corp.constantes.parametros.dominio + "=" + dominio : null
},
eNovaVisitaSitio: function () {
var dominioReferrer =
__srp_est_corp.obterDominio(document.referrer),
dominio;
if (!dominioReferrer) return
__srp_est_corp.constantes.parametros.novaVisita +
"=" + true;
dominio = __srp_est_corp.obterDominioAtual();
if (!dominio) return
__srp_est_corp.constantes.parametros.novaVisita + "=" + true;
return __srp_est_corp.constantes.parametros.novaVisita +
"=" + (dominio !== dominioReferrer)
},
origem: function () {
var dominioReferrer =
__srp_est_corp.obterDominio(document.referrer);
if (dominioReferrer && dominioReferrer !=
__srp_est_corp.obterDominio(document.URL)) return
__srp_est_corp.constantes.parametros.origem + "=" + dominioReferrer
},
horaAcesso: function () {
return __srp_est_corp.constantes.parametros.horaAcesso +
"=" + (new Date).getHours()
},
identificaDuracaoVisita: function () {
var cookie = __srp_est_corp.Cookie.obter("duracao_visita");
if (cookie == null) {
__srp_est_corp.idVisita = __srp_est_corp.gerarGuid();
__srp_est_corp.Cookie.definir("duracao_visita",
__srp_est_corp.idVisita, __srp_est_corp.obterDataCookieDuracao());
return __srp_est_corp.constantes.parametros.visitaId +
"=" + __srp_est_corp.idVisita
} else {
__srp_est_corp.idVisita = cookie;
__srp_est_corp.Cookie.definir("duracao_visita",
__srp_est_corp.idVisita, __srp_est_corp.obterDataCookieDuracao());
return __srp_est_corp.constantes.parametros.visitaId +
"=" + __srp_est_corp.idVisita
}
},
identificaVisita: function () {
var cookie = __srp_est_corp.Cookie.obter("nova_visita_ano");
if (cookie == null) {
__srp_est_corp.idUsuario = __srp_est_corp.gerarGuid();
return __srp_est_corp.constantes.parametros.userId +
"=" + __srp_est_corp.idUsuario
} else {
__srp_est_corp.idUsuario = cookie;
return __srp_est_corp.constantes.parametros.userId +
"=" + __srp_est_corp.idUsuario
}
},
eNovaVisitaDia: function () {
var cookie_dia =
__srp_est_corp.Cookie.obter("nova_visita_dia");
if (cookie_dia == null) {
__srp_est_corp.Cookie.definir("nova_visita_dia",
__srp_est_corp.idUsuario, __srp_est_corp.obterDataInicioDiaSeguinte());
return
__srp_est_corp.constantes.parametros.novaVisitaDia + "=" + true
} else return
__srp_est_corp.constantes.parametros.novaVisitaDia + "=" + false
},
eNovaVisitaMes: function () {
var cookie_mes =
__srp_est_corp.Cookie.obter("nova_visita_mes");
if (cookie_mes == null) {
__srp_est_corp.Cookie.definir("nova_visita_mes",
__srp_est_corp.idUsuario, __srp_est_corp.obterDataInicioMesSeguinte());
return
__srp_est_corp.constantes.parametros.novaVisitaMes + "=" + true
} else return
__srp_est_corp.constantes.parametros.novaVisitaMes + "=" + false
},
eNovaVisitaAno: function () {
var cookie_ano =
__srp_est_corp.Cookie.obter("nova_visita_ano");
if (cookie_ano == null) {
__srp_est_corp.Cookie.definir("nova_visita_ano",
__srp_est_corp.idUsuario, __srp_est_corp.obterDataInicioAnoSeguinte());
return
__srp_est_corp.constantes.parametros.novaVisitaAno + "=" + true
} else return
__srp_est_corp.constantes.parametros.novaVisitaAno + "=" +
false
},
coletarInfoMonitor: function () {
var info = screen.width + "x" + screen.height + "x" +
screen.colorDepth;
return __srp_est_corp.constantes.parametros.infoMonitor +
"=" + info
},
coletarPlugins: function () {
return __srp_est_corp.constantes.parametros.plugins + "=" +
__srp_est_corp.QueryStringGIFEstatisticas.obterPlugins()
},
obterPlugins: function () {
var plugins = [],
i, p, str, mapa =
__srp_est_corp.Plugins.PluginDetect.mapaPlugins;
for (i in mapa)
if (mapa.hasOwnProperty(i)) {
p = mapa[i];
if (p.disponivel) {
str = p.nome;
if (p.versao) str +=
"." + p.versao;
plugins.push(str)
}
}
return plugins.join(",")
},
coletarTermoBuscaExterna: function () {
var termo = __srp_est_corp.TermoBusca.obterTermo();
return termo ?
__srp_est_corp.constantes.parametros.termoBuscaExterna + "=" + termo : null
},
coletarEvitarCache: function () {
return __srp_est_corp.constantes.parametros.evitarCache +
"=" + (new Date).getTime()
},
gerarQueryStringFuncoes: function (arrayFuncoes) {
var funcao, qs = "";
while (arrayFuncoes.length > 0) {
funcao = arrayFuncoes.pop();
qs = __srp_est_corp.concatenarQueryStrings(qs,
funcao())
}
return qs
},
gerarQueryString: function () {
var queryString, concatenarQueryStrings =
__srp_est_corp.concatenarQueryStrings;
__srp_est_corp.Plugins.PluginDetect.init();
var funcoesEstatisticasPorVisitanteUnicoSitio =
[this.coletarEvitarCache, this.coletarInfoMonitor, this.coletarPlugins,
this.coletarTermoBuscaExterna, this.coletarDominio,
this.eNovaVisitaSitio, this.eNovaVisitaAno, this.eNovaVisitaMes,
this.eNovaVisitaDia, this.identificaVisita, this.origem,
this.horaAcesso, this.identificaDuracaoVisita];
queryString =
this.gerarQueryStringFuncoes(funcoesEstatisticasPorVisitanteUnicoSitio);
return queryString
}
},
RequisicaoGIFEstatisticas: {
obterCaminho: function (caminho) {
var protocolo, constantes = __srp_est_corp.constantes;
if (__srp_est_corp.obterDominioAtual() ===
constantes.dominioGIFTransparente) return caminho;
try {
protocolo = __srp_est_corp.obterProtocolo()
} catch (e) {
protocolo = "http:"
}
return protocolo + "//" + constantes.dominioGIFTransparente
+ caminho
},
obterCaminhoGIFTransparante: function () {
return
this.obterCaminho(__srp_est_corp.constantes.caminhoGIFTransparente)
},
agendarGeracaoImagem: function () {
function aoCarregar() {
if (__srp_est_corp.carregado ||
document.getElementById("serpro-componente-estatistica-corporativa"))
return;
var imagem = document.createElement("img"),
queryString, src, constantes =
__srp_est_corp.constantes;
__srp_est_corp.carregado = true;
try {
queryString =
__srp_est_corp.QueryStringGIFEstatisticas.gerarQueryString()
} catch (e) {
queryString = "erroJS=" + escape(e)
}
queryString =
__srp_est_corp.concatenarQueryStrings(queryString,
constantes.parametros.versao + "=" + constantes.versao);
src =
__srp_est_corp.RequisicaoGIFEstatisticas.obterCaminhoGIFTransparante() +
(queryString ? "?" + queryString : "");
imagem.setAttribute("id",
"serpro-componente-estatistica-corporativa");
imagem.style.position = "absolute";
imagem.style.top = 0;
imagem.style.left = 0;
imagem.style.zIndex = 0;
imagem.style.width = 0;
imagem.style.height = 0;
document.body.appendChild(imagem);
imagem.setAttribute("src", src)
}
__srp_est_corp.agendarParaExecutarAoConcluirCargaDOM(aoCarregar)
},
identificaSaidaPagina: function () {
var constantes = __srp_est_corp.constantes;
try {
queryString =
__srp_est_corp.QueryStringGIFEstatisticas.gerarQueryString()
} catch (e) {
queryString = "erroJS=" + escape(e)
}
queryString =
__srp_est_corp.concatenarQueryStrings(queryString,
constantes.parametros.versao + "=" + constantes.versao);
queryString =
__srp_est_corp.concatenarQueryStrings(queryString,
constantes.parametros.horaSaida + "=true");
src =
__srp_est_corp.RequisicaoGIFEstatisticas.obterCaminhoGIFTransparante() +
(queryString ? "?" + queryString : "");
synchronous_ajax(src, "")
}
}
};
(function () {
__srp_est_corp.RequisicaoGIFEstatisticas.agendarGeracaoImagem(false)
})();
window.onbeforeunload = function () {
__srp_est_corp.RequisicaoGIFEstatisticas.identificaSaidaPagina()
};
function synchronous_ajax(url, passData) {
if (window.XMLHttpRequest) AJAX = new XMLHttpRequest;
else AJAX = new ActiveXObject("Microsoft.XMLHTTP"); if (AJAX) {
AJAX.open("POST", url, false);
AJAX.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
AJAX.send(passData);
return AJAX.responseText
} else return false
};
Atenciosamente,
Charles Henrique G. Santos
Procuradoria Geral da República
Ministério Público Federal
(61) 3105-6795
"Ambiente limpo não é o que mais se limpa
e sim o que menos se suja."
Em 28-02-2014 16:06, Bruno Barbosa escreveu:
> Olá pessoal,
>
> Não sei se mais alguém percebeu, mas o código da barra de identidade
> do governo eletrônico contém referência a um javascript que coleta
> dados dos usuários e envia ao Serpro.
>
> Não sei quanto à questões de privacidade e se isso deveria ser
> informado de antemão na página onde o código da barra é fornecido, mas
> além disso isso causa transtornos principalmente para os usuários que
> usam o navegador Internet Explorer, que a cada request uma mensagem de
> alerta aparece na tela avisando que algo não está certo.
>
> Isso ocorre provavelmente porque a barra do governo chama um código
> javascript em barra.brasil.gov.br/barra.js e dentro deste, há a
> referência ao js do Serpro: coletajavascript.serpro.gov.br/estatistica.js
>
> Não sou especialista em segurança, mas não é difícil perceber que esse
> encadeamento faz com os portais que utilizam a barra estão suscetíveis
> a ter inserido em seu fonte qualquer código sem vosso consentimento.
>
> Por que assim como em versões anteriores da barra de identidade do
> governo, não nos fornecem o material com as especificações necessárias
> para que possamos nós mesmos codificar e inserir a barra gov? Estas
> chamadas externas só aumentam o tempo de carregamento da página e faz
> com que, quando estes servidores de terceiros estejam fora do ar, o
> carregamento dos demais portais que utilizam a barra fique mais lento.
>
> --
> Bruno Barbosa
> bsbruno1 em gmail.com
>
>
>
> _______________________________________________
> Comunidade Plone no Governo
> Site: http://www.softwarelivre.gov.br/plone
> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br
Mais detalhes sobre a lista de discussão PloneGov-BR