X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fhtmloutputter.php;h=5e400379529b1c72e5b8c0631528d9ae78e3c3de;hb=f134a423f6a9e7bb61d069c4d6281c05417bbd45;hp=d079fac06947228811bbe2133264bd20ec1567cd;hpb=b716d01a41c54c06676a1e54a48c36e05755a247;p=quix0rs-gnu-social.git diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php index d079fac069..5e40037952 100644 --- a/lib/htmloutputter.php +++ b/lib/htmloutputter.php @@ -28,11 +28,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/xmloutputter.php'; +if (!defined('GNUSOCIAL')) { exit(1); } // Can include XHTML options but these are too fragile in practice. define('PAGE_TYPE_PREFS', 'text/html'); @@ -58,6 +54,9 @@ define('PAGE_TYPE_PREFS', 'text/html'); class HTMLOutputter extends XMLOutputter { + protected $DTD = array('doctype' => 'html', + 'spec' => '-//W3C//DTD XHTML 1.0 Strict//EN', + 'uri' => 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'); /** * Constructor * @@ -108,20 +107,45 @@ class HTMLOutputter extends XMLOutputter header('Content-Type: '.$type); + // Output anti-framing headers to prevent clickjacking (respected by newer + // browsers). + if (common_config('javascript', 'bustframes')) { + header('X-XSS-Protection: 1; mode=block'); // detect XSS Reflection attacks + header('X-Frame-Options: SAMEORIGIN'); // no rendering if origin mismatch + } + $this->extraHeaders(); if (preg_match("/.*\/.*xml/", $type)) { // Required for XML documents - $this->xw->startDocument('1.0', 'UTF-8'); + $this->startXML(); } - $this->xw->writeDTD('html', - '-//W3C//DTD XHTML 1.0 Strict//EN', - 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'); + + $this->writeDTD(); $language = $this->getLanguage(); - $this->elementStart('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', - 'xml:lang' => $language, - 'lang' => $language)); + $attrs = array( + 'xmlns' => 'http://www.w3.org/1999/xhtml', + 'xml:lang' => $language, + 'lang' => $language + ); + + if (Event::handle('StartHtmlElement', array($this, &$attrs))) { + $this->elementStart('html', $attrs); + Event::handle('EndHtmlElement', array($this, &$attrs)); + } + } + + public function setDTD($doctype, $spec, $uri) + { + $this->DTD = array('doctype' => $doctype, 'spec' => $spec, 'uri' => $uri); + } + + protected function writeDTD() + { + $this->xw->writeDTD($this->DTD['doctype'], + $this->DTD['spec'], + $this->DTD['uri']); } function getLanguage() @@ -159,27 +183,45 @@ class HTMLOutputter extends XMLOutputter * a cluster of elements, including a