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.生成令牌并在服务器端验证令牌。
有很多方法可以阻止用户提供的恶意数据插入数据库。
关于您的情况,您可以执行以下步骤:
- 检查从服务器生成的传入ajax调用
- 在您的应用程序中添加CSRF
- 始终将插入的数据清理到称为SQL注入的数据库中,您可以在OWSAP中阅读有关SQL注入的信息
- 始终使用htmlentities()搜索htmlentities php函数在屏幕上显示输出
谢谢,我希望这一定能帮助你了解安全。