目前我正在尝试创建一个传递数据的应用程序来删除数据库中的一行。该行将通过html文件传递给js。
的ID来识别目前我有一个Html文件,Javascript和PHP文件,它们共同工作以传递这些数据。
我想要做的是保护它,所以没有人可以将数据发送到javascript文档以便删除该行。
HTML - > JS - > PHP
JS:
function deleteListing(id) {
var answer = confirm("Are you sure you want to delete this listing?")
if (answer) {
$.post("assets/scripts/deleteListing.php", {
id: id
},
function (result) {
var response = jQuery.parseJSON(result);
if (response.available === true) {
location.reload();
} else if (response.available === false) {
// alert("FAILURE DELETING USER");
} else if (response.root === true) {
// alert("Cannot Delete Root User..");
}
});
} else {
return;
}
}
PHP:
<?
require("../../../assets/config/config.php");
$id_retrieve = $_POST['id'];
$data = new stdClass();
$sth= $dbh-> prepare("SELECT * FROM listings WHERE id='".$id_retrieve."'");
$sth -> execute();
$row = $sth -> fetch();
$data->available = true;
$dbh->exec("DELETE FROM listings WHERE id = '".$id_retrieve."'");
echo json_encode($data);
?>
在有人说使用预准备语句创建语句之前,我知道这一点,并会尽快解决。除此之外,我是否可以保护Javascript文件免受未经授权的访问?或者我可以以某种方式限制它?
谢谢!
答案 0 :(得分:1)
有几种解决方案。
正如@Tobias上面所述:使用会话来处理身份验证。这会保护你一些。
但是,仅此一项并不能阻止跨会话攻击。
请看这个页面:http://phpsec.org/projects/guide/2.html
它建议在表单上放置一个标记值和将其保存在会话中。这样,当提交表单时,您可以将传入令牌与会话中的令牌进行比较,并验证表单确实来自您的站点。
<?php
session_start();
if (isset($_POST['message']))
{
if (isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token'])
{
$message = htmlentities($_POST['message']);
$fp = fopen('./messages.txt', 'a');
fwrite($fp, "$message<br />");
fclose($fp);
}
}
$token = md5(uniqid(rand(), true));
$_SESSION['token'] = $token;
?>
<form method="POST">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="text" name="message"><br />
<input type="submit">
</form>
<?php
readfile('./messages.txt');
?>