Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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
如何保护AJAX或javascript web应用程序_Javascript_Ajax_Code Injection_Websecurity_Client Side Attacks - Fatal编程技术网

如何保护AJAX或javascript web应用程序

如何保护AJAX或javascript web应用程序,javascript,ajax,code-injection,websecurity,client-side-attacks,Javascript,Ajax,Code Injection,Websecurity,Client Side Attacks,这是一个简单的函数,它使用AJAX并在单击按钮时获取关于数据库中id为219的图像的信息 任何加载此网页的人都可以通过转到源代码来更改javascript代码。 然后单击按钮,他将运行修改后的代码,如将image_id从219更改为300。因此,他只需更改图像id即可获得有关任何图像的信息 问题是如何防止客户端攻击或XSS 您可以使用类似以下内容来生成和验证cookie: 定义“COOKIE_TOKEN”、“my_TOKEN”; 类BaseAuth { 受保护的$uid; 私有静态函数base6

这是一个简单的函数,它使用AJAX并在单击按钮时获取关于数据库中id为219的图像的信息

任何加载此网页的人都可以通过转到源代码来更改javascript代码。 然后单击按钮,他将运行修改后的代码,如将image_id从219更改为300。因此,他只需更改图像id即可获得有关任何图像的信息

问题是如何防止客户端攻击或XSS


您可以使用类似以下内容来生成和验证cookie:

定义“COOKIE_TOKEN”、“my_TOKEN”; 类BaseAuth { 受保护的$uid; 私有静态函数base64url\u encodestring$s:string { 返回strtr$s,“+/=”,“-||”; } 私有静态函数base64url\u decodestring$s:string { 返回strtr$s,'-|",'+/='; } //加密后进行编码,以确保加密字符是URL安全的 受保护的函数标记\u encodeString$string:string { $iv_size=openssl_cipher_iv_lengthTYPE_CRYPT; $iv=openssl\u随机\u伪\u字节$iv\u大小; $encrypted_string=@openssl_encrypt$string,键入_CRYPT,SALT,0,$iv; //返回初始化向量+加密字符串 //解码时我们需要iv美元。 返回self::base64url\u encode$加密的\u字符串。“!”。self::base64url\u encode base64\u encode$iv; } //解密前从URL安全解码 受保护的函数令牌\u decodeString$string:string { //从加密字符串中提取初始化向量。 列出$encrypted_string,$iv=explode'!',$string; $string=@openssl\u decryptself::base64url\u decode$encrypted\u string,TYPE\u CRYPT,SALT,0,base64\u decodeself::base64url\u decode$iv; 返回$string; } //执行注销 公共功能清除cookie { setcookieCOOKIE_令牌,时间-300,'/api',FALSE,TRUE;//不安全;仅HTTP } 私有函数userIP:string { 返回$服务器['REMOTE\u ADDR']; } //验证登录令牌 授权公共职能:bool { ifisset$\u COOKIE[COOKIE\u令牌] { $stamp=时间; $text=$this->token\u decode$\u COOKIE[COOKIE\u token]; 如果$text!= { $json=json_decode$text,TRUE; ifjson\u last\u error==JSON\u error\u NONE { 如果$json['at']$stamp和$json['ip']=$this->userIP和$json['id']!=0 { //检查用户帐户是否仍处于活动状态 $res=$db->QuerySelectID,活动,上次更新,上次更新>'.$json['last'].::时间戳从id=.$json['id']的帐户过期; $info=$db->fetch\u assoc$res; 如果$info['active']!=0 { 如果$info['expired']==0 { //延长令牌生存期 $this->sendToken$info; $this->uid=$json['id']; 返回TRUE; } } } } } $this->clear_cookie; } 返回FALSE; } 公用函数登录字符串$username,字符串$password:bool { $stm=$db prepareSELECT id,用户名作为用户名,用户名通过,全名,活动,上次更新,COALESCEblocked,NOW>NOW作为blocked 来自帐户,其中user_name=:user; $res=$stm->executearray'user'=>strtolower$json['username']; 如果$res->rowCount { $info=$db->fetch\u assoc$res; 如果$info['active']==0 { //帐户已禁用 返回FALSE; } elseif$info['blocked']!=0 { //被阻止5分钟-错误密码太多 //扩大封锁 $db->queryUPDATE帐户集被阻止\u直到现在+间隔5分钟,其中id=.$info['id']; 返回FALSE; } elseif!password\u verify$password,$info['user\u pass'] { //错误的密码或用户名 //固定账户 $db->queryUPDATE帐户集被阻止\u直到现在+间隔5分钟,其中id=.$info['id']; 返回FALSE; } 其他的 { 取消设置$info['user_pass']; 未设置$info[“已阻止”]; $this->sendToken$info; 返回TRUE; } } } }
如果您不需要对用户进行身份验证和授权,只需要随机的不可预测的图像ID,您只需使用UUID即可。

黄金法则是。。永远不要相信客户。在服务器端执行安全/验证/身份验证在前端和后端验证都是必须的,因为有人可能会使用诸如postman之类的工具绕过前端验证,因此服务器必须验证它接收到的内容。这是我正在使用PHP作为后端语言的一个例子。您能否在后端发布一个关于如何防止这种情况的示例?也许一种方法是检查会话id是否等于该映像表中的用户id?为了确保他不能查看其他用户的图像,您应该只允许在客户端提供cookie的情况下获取图像,并且此cookie必须具有HttpOnly标志,并且必须经过加密
对称加密算法之一,例如AES-256。cookie必须有较短的过期时间-例如10-15min@IVOGELOV那块饼干的价值应该是多少?基于什么,应该允许用户获取图像?
function clicked () {
    var xhttp = new XMLHttpRequest () ;

    xhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200){
            var obj = JSON.parse (this.responseText);
            alert (obj.description);
        }
    };

    xhttp.open ("POST","get_title_description.php", true);
    xhttp.setRequestHeader ("Content-type", "application/x-www-form-urlencoded");
    xhttp.send ("image_id=219") ;
}