Javascript、PHP和SQL安全性—接收信息的基本验证。
我一直在开发一个社交网络。我注意到一些安全问题,用户可以将javascript/jquery中的变量更改为其他用户id、文本内容和加载到脚本中的其他信息。这一切都是通过inspect工具或其他可以编辑语言的软件完成的。他们甚至可以重写函数 将url_id发送到php函数后,我通过php和sql将数据加载到页面上 我有javascript和jquery脚本,它们反过来使用这些数据来执行ajax、post和get请求以及执行函数 在将这些变量发送到服务器之前,如何阻止用户更改这些变量?例如,当用户发布帖子时,他们可以更改id以使其成为其他人的帖子,或者当他们单击“删除图像”时,他们可以删除其他人的帖子,这会变得更加复杂。这是一个巨大的问题 这些脚本包含在php页面或通过ajax加载的php脚本中Javascript、PHP和SQL安全性—接收信息的基本验证。,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我一直在开发一个社交网络。我注意到一些安全问题,用户可以将javascript/jquery中的变量更改为其他用户id、文本内容和加载到脚本中的其他信息。这一切都是通过inspect工具或其他可以编辑语言的软件完成的。他们甚至可以重写函数 将url_id发送到php函数后,我通过php和sql将数据加载到页面上 我有javascript和jquery脚本,它们反过来使用这些数据来执行ajax、post和get请求以及执行函数 在将这些变量发送到服务器之前,如何阻止用户更改这些变量?例如,当用户发
我怎样才能阻止这一切?你能给我一个简单的解释吗?几个月来我一直在寻找如何阻止这种情况。我仍然不明白如何阻止用户这样做。如果有其他方法可以做到这一点?你能给我提供100%真实的例子吗?我还有其他选择吗 下面是我的一些代码片段
<? if (login_check($mysqli) == true) : ?>
<script>
$.post("auto/online.php?q=<? echo $id ?>");
function o() {
setTimeout(function() {
$.post("auto/online.php?q=<? echo $id ?>");
o();
}, 6e4);
}
</script>
<? endif; ?>
<?php echo '<div class="post-btn" onclick="ajaxPost(postenter.value,\''.$name.'\',\''.$id.'\');" title="Post">Post</div>'; ?>
function ajaxPost(content,name,id) {
var ip = '<?php echo $ip ?>';
content = content.replace(/<br\s*\/?>/mg,"\n");
var postArray = [content, id, ip];
postArray = JSON.stringify(postArray);
alert(postArray);
if (content.length == 0) {
alert('Oops it looks like your post is empty.');
} else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("postenter").innerHTML = "";
var html = xmlhttp.responseText;
alert(html);
$(html).hide().insertAfter("#wrapper").fadeIn(500);
document.getElementById("postenter").value = "";
}
}
xmlhttp.open("POST", "auto/post.php", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send('data=' + postArray);
}
}
<? if ($id == $user) : ?>
<div class="modalSetPro" onclick="setProImage(<? echo $picID; ?>,<? echo $uid; ?>)">Set Profile</div>
<div class="modalSetBac" onclick="setProCover(<? echo $picID; ?>,<? echo $uid; ?>)">Set Background</div>
<div class="modalDelImg" onclick="delItemPre(<? echo $picID; ?>, 1, <? echo $uid; ?>)">Delete</div>
<? endif; ?>
function delItemPre(itemID, type, user) {
var modArr = [itemID, type, user];
modArr = JSON.stringify(modArr);
$("#LoadMe").load('modals/del_modal.php?p=' + modArr);
}
$.post(“auto/online.php?q=”);
函数o(){
setTimeout(函数(){
$.post(“auto/online.php?q=”);
o();
},6e4);
}
函数delItemPre(项目ID、类型、用户){
var modArr=[itemID,type,user];
modArr=JSON.stringify(modArr);
$(“#LoadMe”).load('modals/del#modal.php?p='+modArr);
}
您无法阻止这种情况,这就是为什么需要服务器端验证
下面是一个讨论它的例子:
这里有一些很好的信息:
基本上,您希望将验证放在发布ajax的PHP页面中。在服务器端而不是客户端存储并检查所有不安全的数据。这样用户就无法更改它。首先,当您在客户端工作时,您无法控制用户如何与jquery或javascript代码交互。所以经验法则是永远不要在html或java脚本中公开敏感数据 如果您对安全性感到好奇,您不需要在隐藏字段或任何其他客户端代码(html)中加载用户id。在您的情况下,例如当用户回复任何帖子时,您必须在服务器端交叉检查当前登录的用户是否有权执行此任务。还要交叉检查此帖子是否与当前登录的用户相关。 我对php一无所知,但在asp.net中,我们可以在服务器端创建一个会话,当用户post数据从会话而不是用户发布的html内容中获取用户id时 在将这些变量发送到服务器之前,如何阻止用户更改这些变量?例如,当用户发布帖子时,他们可以更改id以使其成为其他人的帖子,或者当他们单击“删除图像”时,他们可以删除其他人的帖子,这会变得更加复杂。这是一个巨大的问题 你不能
服务器端代码应该评估用户的权限,并决定他们是否可以执行该操作。JavaScript验证更多的是为了用户体验——指导和防止错误。“你能给我一个简单的解释吗?”不。也许如果你提供一些代码,我们可以给你一些指导。你能提供一个如何验证服务器端的示例吗?我发布了一些代码片段,我编辑了我的回复,为您添加了一些信息。我知道如何在表单上执行php检查,但如何验证用户id,以便他们无法在客户端使用php将其更改为其他人的id?啊,我明白。我所知道的处理此问题的唯一方法是将PHP会话id返回给客户端,并将其包含在您的请求中。然后确保会话id是有效的,并且该会话中的用户有权访问该id。您应该始终对每个请求重新授权访问。使用php,我将如何执行此操作?你愿意提供一个我用过的代码片段的例子吗?你愿意提供一个php页面的例子来验证我用过的代码片段吗?@DarkMoria不,我不会为你写代码。基于PHP的服务器端验证示例很容易找到。感谢您的反馈,在5个月的课程中,我学到了很多关于安全性的知识。谢谢新用户很难了解真正的“服务器端”代码的完整视图,以及您做什么和不做什么。