Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这种情况下,如何使用PHP防止javascript(http://my_host_here.com/publications.php/";>;<;脚本>;警报(1)<;/script>;)?_Php_Javascript_Sql Injection - Fatal编程技术网

在这种情况下,如何使用PHP防止javascript(http://my_host_here.com/publications.php/";>;<;脚本>;警报(1)<;/script>;)?

在这种情况下,如何使用PHP防止javascript(http://my_host_here.com/publications.php/";>;<;脚本>;警报(1)<;/script>;)?,php,javascript,sql-injection,Php,Javascript,Sql Injection,我尝试了下面的代码,但似乎javascript是在http请求发送到服务器之前运行的 谢谢 <?php class secure { function secureSuperGlobalGET(&$value, $key) { $_GET[$key] = htmlspecialchars(stripslashes($_GET[$key])); $_GET[$key] = str_ireplace("script", "blocked

我尝试了下面的代码,但似乎javascript是在http请求发送到服务器之前运行的

谢谢

<?php

class secure
{
    function secureSuperGlobalGET(&$value, $key)
    {
        $_GET[$key] = htmlspecialchars(stripslashes($_GET[$key]));
        $_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]);
        $_GET[$key] = mysql_escape_string($_GET[$key]);
        return $_GET[$key];
    }

    function secureSuperGlobalPOST(&$value, $key)
    {
        $_POST[$key] = htmlspecialchars(stripslashes($_POST[$key]));
        $_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]);
        $_POST[$key] = mysql_escape_string($_POST[$key]);
        return $_POST[$key];
    }

    function secureGlobals()
    {
        echo "in here";
        array_walk($_GET, array($this, 'secureSuperGlobalGET'));
        array_walk($_POST, array($this, 'secureSuperGlobalPOST'));
    }
}

?>

  • 让你的班级“安全”
  • 仅对SQL查询中作为带引号字符串的值使用
    mysql\u[real\uu]escape\u string
  • 任何其他SQL部件都必须根据其角色进行格式化
  • 在组装查询之前格式化SQL部件,而不是在其他任何地方
  • 或者最好为此使用占位符

  • 最后,回答您的问题:在回显用户提交的值时,对其使用htmlspecialchars()

    如果Javascript在代码返回服务器之前运行,那么这很可能是某种形式的基于DOM的XSS。Javascript可能正在提取alert(1)的值,并将其直接放入DOM中。您可能需要更改客户端处理该值的方式


    OWASP对如何抵御基于DOM的跨站点脚本攻击(如以下攻击)有一个非常好的概述:

    不确定您在这里要做什么。您只是将这些糟糕的字符串弄得面目全非:)始终只为手头的任务转义。您能说明您在什么情况下试图阻止什么吗?看看您是如何使用的吗在请求发送到服务器之前,如果发生了什么事情,您需要发布HTML/Javascript代码。