Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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/295.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 使用XMLHTTPRequest从数据库中提取数据_Javascript_Php_Mysql_Xmlhttprequest - Fatal编程技术网

Javascript 使用XMLHTTPRequest从数据库中提取数据

Javascript 使用XMLHTTPRequest从数据库中提取数据,javascript,php,mysql,xmlhttprequest,Javascript,Php,Mysql,Xmlhttprequest,我想在不刷新页面的情况下从数据库中提取一些数据。最好的方法是什么 我使用以下XMLHTTPRequest函数从cart.php文件中获取一些数据(购物车项目)。此文件根据选项值执行各种功能。 例如:option=1表示获取所有购物车项目option=2表示删除所有购物车项目并返回字符串“您的购物车是空的。”。选项=3、4…等等 我的XHR函数: function getAllCartItems() { if(window.XMLHttpRequest)

我想在不刷新页面的情况下从数据库中提取一些数据。最好的方法是什么

我使用以下XMLHTTPRequest函数从
cart.php
文件中获取一些数据(购物车项目)。此文件根据
选项
值执行各种功能。 例如:
option=1
表示获取所有购物车项目
option=2
表示删除所有购物车项目并返回字符串
“您的购物车是空的。”
。选项=3、4…等等

我的XHR函数:

    function getAllCartItems()
    {
        if(window.XMLHttpRequest)
        {
            allCartItems = new XMLHttpRequest();
        }
        else
        {
            allCartItems=new ActiveXObject("Microsoft.XMLHTTP");
        }

        allCartItems.onreadystatechange=function()
        {
            if (allCartItems.readyState==4 && allCartItems.status==200)
            {
                document.getElementById("cartmain").innerHTML=allCartItems.responseText;
            }
            else if(allCartItems.readyState < 4)
            {
                 //do nothing
            }
        }
        var linktoexecute = "cart.php?option=1";
        allCartItems.open("GET",linktoexecute,true);
        allCartItems.send();
    }
我的问题:

  • 有没有其他方法可以从数据库中获取数据而无需 刷新页面
  • 是否存在任何潜在威胁(黑客攻击、服务器利用率、, 性能等)在我做这件事的方式?我相信一个黑客 使用option=1,我的服务器是否可以发送不必要的请求, 2、3等

  • Ajax
    是实现此目的的最佳选择

    现在使用
    Ajax
    发送和接收数据最好使用
    XML
    。因此,我建议使用
    Web服务
    。您可以使用
    SOAP/REST
    web服务根据请求从数据库中获取数据

    您可以使用它来了解更多关于Web服务的信息

    对于教程,互联网上有足够多的文章。

    我不认为拒绝服务攻击是您主要关注的问题,这里。如果返回HTML,
    cart.php
    ,这种担心同样有效。不,通过AJAX公开公共API是非常常见的做法

    不过,需要记住的一点是,通过同一个URL列出和删除项目都是模棱两可的。最好(至少)将这些操作(或“方法”)分离成不同的URL(例如:
    /cart/list
    /cart/clear

    <>如果你愿意进一步发展,你应该考虑实施一个“API”。这意味着,除其他外,只能使用正确的HTTP谓词调用方法。你可能只听说过
    GET
    POST
    ,但还有
    PUT
    DELETE
    等。这背后的原因是使方法幂等,这意味着它们一次又一次地做同样的事情,不管你调用它们多少次。例如,
    GET
    调用
    /cart
    将始终列出内容,
    DELETE
    调用
    /cart
    将始终删除购物车中的所有项目

    虽然为您的购物车编写一个完整的RESTAPI可能并不实际,但我相信其中的一些原则可能会帮助您构建一个更健壮的系统

    一些阅读材料:

  • 您使用的是
    XMLHttpRequest
    对象,因此您不会刷新页面(它是AJAX),或者有些事情您没有告诉

  • 如果黑客想要DDOS攻击您的网站或数据库,他可以使用其任何页面。。。只要您不在客户端和服务器之间传输SQL请求中使用的字符串,就可以了

  • 我要警告您使用原始文本响应显示。我鼓励您将响应格式化为XML或JSON,以正确定位需要插入DOM的对象,并返回标记以正确处理错误(die(“我是您的父亲luke”)不会帮助任何用户),并将它们显示在web页面的特殊区域


  • 首先,您应该考虑分离应用程序的不同部分。拥有一个通用文件来执行与Cart相关的所有其他任务,这违反了各种软件设计原则

    第二,第一个漏洞是SQL注入。您应该永远不要将输入连接到SQL

    假设我发布了
    1;截断表车。那么您的SQL将如下所示:

    从cartid=1的购物车中选择itemid;截断表车
    首先选择有问题的项目,然后破坏数据库

    你应该这样写:

    $item = $_COOKIE['cart'];
    $item = preg_replace_all("['\"]", "\\$1", $item);
    
    为了避免刷新,您可以在页面上放置链接。类似于,

    就安全性而言,不管您的业务逻辑如何,引入一个只与您的数据相关的数据库层,然后添加一个依赖于数据库层的服务层,这将为执行业务层操作提供便利

    您还应该注意@PPvG建议,并使用Apache的mod_rewrite或其他类似工具使URL更有意义


    另一个注意事项:尝试用JSON或XML格式封装数据。我建议使用
    json_encode()
    JSON.parse()在客户端。这将确保安全交付。

    说“最好使用XML实现AJAX”就像说“最好使用XML到处旅行”。当然,XML有它的用途。但有时,更简单的交换格式(如)是更好的选择。这完全取决于上下文。换句话说:如果你要去隔壁(10米:你应该步行)或地球的另一边(16.000公里:买机票),不要开车去。另外,应该注意的是,对于慢速连接,XML会占用大量带宽,而JSON要轻得多。你能澄清一下RESTful api与使用HTTP POST或GET相比如何减少我遭受拒绝服务攻击的漏洞吗?我问这个问题的原因是我已经实现了使用GET或POST的API,我一直在想如何使它们更安全。谢谢@曼尼什:他们没有,你确实使用了
    POST
    GET
    。REST旨在使您的API不那么模棱两可(更加明确),并防止意外的副作用。如何保护您的API取决于您想要保护它的内容(即,您想要访问限制,还是保护它不受洪水的影响?)我已经实施了访问限制
    $item = $_COOKIE['cart'];
    $item = preg_replace_all("['\"]", "\\$1", $item);