远程javascript ajax php攻击


remote javascript-ajax-php attack

Javascript是一种客户端语言,因此可以读取和复制脚本。

现在考虑这个例子。

<html>
<head>
<title>title</title>
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
</head>
<body>
    <script type="text/javascript">
    $(document).ready(function () {
        $('#user').blur(function () {
            var dataString = 'user=' + user;
            $.ajax({
                type: "POST",
                url: "insertUser.php",
                data: dataString
            }
        }
    }
    </script>
    <label for='user' >User:</label>
    <input id="user"  type="text" />
</body>

insertUser.php

<?php
$user = filter_input(INPUT_POST, 'user');
if (isset($user)) {
    require_once("class.Database.php");
    $db = Database::getInstance();
    $mysqli = $db->getConnection();
    $stmt = $mysqli->prepare("INSERT INTO Users (User) VALUES (?)");
    $stmt->bind_param("s", $user);
    $stmt->execute();
}

有人能在本地主机中编写一个脚本,使用insertUser.php的路径插入自己的数据吗?不管怎样解决这个问题?

是的,任何人都可以将任何数据发送到您的insertUser.php

关于保护,这取决于用例。发送数据的Chceck,授权任何应该授权的请求等。

最佳做法是将来自外部的任何数据(无论它们来自哪里)视为最危险和最恶意的数据。

有人能在本地主机中编写一个脚本,使用insertUser.php的路径插入自己的数据吗

是的,任何人都可以使用insertUser.php 的路径发布自己的数据

要解决这个问题吗

1.检查请求是否为Ajax类型,并来自您的域

if(($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') && ($_SERVER['HTTP_REFERER']=="http://yourdomain/url")) {
 //Is ajax call
}


2.跨来源政策;即拒绝来自其他域的帖子

3.生成令牌并在服务器端验证令牌。

有很多方法可以阻止用户提供的恶意数据插入数据库。

关于您的情况,您可以执行以下步骤:

  1. 检查从服务器生成的传入ajax调用
  2. 在您的应用程序中添加CSRF
  3. 始终将插入的数据清理到称为SQL注入的数据库中,您可以在OWSAP中阅读有关SQL注入的信息
  4. 始终使用htmlentities()搜索htmlentities php函数在屏幕上显示输出

谢谢,我希望这一定能帮助你了解安全。