2

今日、私はContent-Security-Policy(CSP)を実装しました。また、 POSTリクエストをreport-uriに送信するように含めました。MDNがWebサイトで説明しているように、POSTリクエストは次のようになります。myserver.com/csp-report.php

{
  "csp-report": {
    "document-uri": "http://example.com/signup.html",
    "referrer": "http://evil.example.net/haxor.html",
    "blocked-uri": "http://evil.example.net/injected.png",
    "violated-directive": "img-src *.example.com",
    "original-policy": "default-src 'self'; img-src 'self' *.example.com; report-uri /_/csp-reports",
  }
}

この情報をreports@myserver.comに電子メールで送信したいと思います。現在、私はこのコードを持っていますが、それは単に「Array()Array()」に電子メールを送ります

<?php
$tars = Array("reports@myserver.com", "webm@myserver.com");
$from = "notify@myserver.com";
$subject = "CSP Report";
$text = print_r($_POST, true);
$text = (isSet($_GET["text"]) ? $_GET["text"] : $text);
foreach($tars as $tar){
    $e = mail($tar,$subject,$text,"From: $from");
}
if($e){
    header("Content-type: text/javascript"); 
    echo 'console.log("Email Sent");';
    exit();
}
?>
4

1 に答える 1

6
<?php
#
# Set vars for mail sender and recipient
$sender  = $_SERVER['SERVER_ADMIN'];
$recipient = $_SERVER['SERVER_ADMIN'];
$subject = $_SERVER['SERVER_NAME'] . ' CSP Report';
$smtp_headers = 'From: ' . $_SERVER['SERVER_ADMIN'] . "\r\n" .
    'Reply-To: ' . $_SERVER['SERVER_ADMIN']  . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
#
# Get the report content
$json = file_get_contents('php://input');
if ($json === false) {
    throw new Exception('Bad Request');
}
$message = 'The user agent "' . $_SERVER['HTTP_USER_AGENT'] . '" '
            . 'from ' . $_SERVER['REMOTE_HOST'] . ' '
            . '(IP ' . $_SERVER['REMOTE_ADDR'] . ') '
            . 'reported the following content security policy (CSP) violation:' . "\n\n";
$csp = json_decode($json, true);
if (is_null($csp)) {
    throw new Exception('Bad JSON Violation');
}

# Parse
foreach ($csp['csp-report'] as $key => $value) {
    $message .= '    ' . $key . ": " . $value ."\n";
}

#
# Send the report
$reported = mail( $recipient, $subject, $message, $smtp_headers );

#
# Log in client?
if ( $reported ) {
    header("Content-type: text/javascript"); 
    echo 'console.log("Email Sent");';
    exit();
}
?>
于 2013-02-22T17:16:02.260 に答える