Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
Javascript、PHP和SQL安全性—接收信息的基本验证。_Javascript_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Javascript、PHP和SQL安全性—接收信息的基本验证。

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请求以及执行函数 在将这些变量发送到服务器之前,如何阻止用户更改这些变量?例如,当用户发

我一直在开发一个社交网络。我注意到一些安全问题,用户可以将javascript/jquery中的变量更改为其他用户id、文本内容和加载到脚本中的其他信息。这一切都是通过inspect工具或其他可以编辑语言的软件完成的。他们甚至可以重写函数

将url_id发送到php函数后,我通过php和sql将数据加载到页面上

我有javascript和jquery脚本,它们反过来使用这些数据来执行ajax、post和get请求以及执行函数

在将这些变量发送到服务器之前,如何阻止用户更改这些变量?例如,当用户发布帖子时,他们可以更改id以使其成为其他人的帖子,或者当他们单击“删除图像”时,他们可以删除其他人的帖子,这会变得更加复杂。这是一个巨大的问题

这些脚本包含在php页面或通过ajax加载的php脚本中


我怎样才能阻止这一切?你能给我一个简单的解释吗?几个月来我一直在寻找如何阻止这种情况。我仍然不明白如何阻止用户这样做。如果有其他方法可以做到这一点?你能给我提供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个月的课程中,我学到了很多关于安全性的知识。谢谢新用户很难了解真正的“服务器端”代码的完整视图,以及您做什么和不做什么。