Font Grabber Test
by skibulk
HTML
<p id="sample1">Sample One: CSS Import WOFF</p>
<p id="sample2">Sample Two: CSS Base64</p>
CSS
@import url(https://fonts.googleapis.com/css?family=Open+Sans);
#sample1 {
font-family: 'Open Sans', sans-serif;
}
@font-face {
font-family: 'processingjs';
src: url('data:font;base64,AAEAAAAKAIAAAwAgT1MvMiSxS3IAAAEoAAAATmNtYXAADABgAAABgAAAACxnbHlmNXNjoQAAAbQAAAAUaGVhZP2LrX8AAACsAAAANmhoZWEApAP5AAAA5AAAACRobXR4BEQACgAAAXgAAAAIbG9jYQAKAAAAAAGsAAAABm1heHAABAADAAABCAAAACBuYW1lAEQQrwAAAcgAAAA4cG9zdP/0AAQAAAIAAAAAIAABAAAAAQAA68O6h18PPPUACwBAAAAAAM8VOAYAAAAAzxU4BgAKAAAAOgA4AAAABgABAAAAAAAAAAEAAABM/+wAEgQAAAoACgA6AAEAAAAAAAAAAAAAAAAAAAACAAEAAAACAAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiAZAABQAIACgAKAAAAAYAKAAoAAAAHgADAA8AAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASEwgIABAAC0ALQAt//MABwBMABQAAAQAAAAARAAKAAAAAQADAAEAAAAMAAQAIAAAAAQABAABAAAALf//AAAALf///9QAAQAAAAAAAAAAAAoAAAABAAoAAAA6ADgAAgAAMyM1OjA4AAAABAA2AAMAAQQJAAEAAgAAAAMAAQQJAAIAAgAAAAMAAQQJAAMAAgAAAAMAAQQJAAQAAgAAAHMAAwAAAAAAAP/xAAQAAAAAAAAAAAAAAAAAAAAAAAAAAA==');
font-weight: normal;
font-style: normal;
}
#sample2 {
font-family: processingjs, sans-serif;
}
JavaScript
// Potential Blocks
// url(honeypot.woff) => Ban IP
// JS generate false positives
// JS onHover decode & apply font
// JS onBlur remove font
// JS disable text selection
// JS transparent barrier
// CSS Cross Origin: Cannot read rules using JS
var text = document.documentElement.innerHTML + "\r\n";
text += read_css(document.styleSheets);
//console.log(text);
function read_css(css) {
var out = '';
var i = 0,
il = css.length;
for (; i < il; i++) {
var rules = css[i].rules || css[i].cssRules;
var j = 0,
jl = rules.length;
for (; j < jl; j++) {
var rule = rules[j];
console.log(rule);
if (rule.stylesheet)
{
out += read_css(rule.stylesheet) + "\r\n";
}
else
{
out += rule.cssText + "\r\n";
}
}
}
return out;
}
// Regex
// Base64 ignores white space
// Cannot validate (length // 4) without excessive processing
// Can validate length > 544 bytes minimum file size
var regex = /([A-Za-z0-9\+\/\\\s]{544,}[=]{0,2})/gm;