gpt4 book ai didi

javascript - 在客户端/服务器通信中使用这两种不同的风格有什么优缺点吗?

转载 作者:行者123 更新时间:2023-12-01 03:59:08 24 4
gpt4 key购买 nike

好吧,我有两种不同的方式与服务器端 PHP 进行通信,我想根据您的专家意见了解这两种方式是否有任何缺点。

首先是从我的客户端 HTML 发送到我的服务器端 PHP 的完整字符串

function myCall(){
var name1 = "myName";
var name2 = "myOtherName";
var myString = "SELECT * FROM myTable WHERE id IS NOT NULL AND name='"+ name1 +"' AND secondName='"+name2+"'";
var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
recievedData = JSON.parse(this.responseText);
recievedData.forEach(function(item){
document.getElementById("demo").innerHTML += recievedData.name;
});
}

};

xmlhttp.open("GET", "myphp.php?q="+myString,true);
xmlhttp.send();
}

然后被服务器端PHP接收

$q = $_REQUEST['q'];

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = $q;
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));
$outp = array();

while($row=mysqli_fetch_assoc($result))
{
$outp[] = $row;
}


echo json_encode($outp);
?>

还有另一种方法。 --------------------------------------------------

function myCall(){
var name1 = "myName";
var name2 = "myOtherName";

var myString = name1 + " " + name2;
var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
recievedData = JSON.parse(this.responseText);
recievedData.forEach(function(item){
document.getElementById("demo").innerHTML += recievedData.name;
});
}

};

xmlhttp.open("GET", "myphp.php?q="+myString,true);
xmlhttp.send();
}

并且被该 PHP 接收,但它使用 explode() 将其转换为 php 可以理解的数组。

$q = $_REQUEST['q'];
$exp = explode(" ", $q);

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM myTable WHERE id IS NOT NULL AND name='"+ exp[0] +"' AND secondName='"+ exp[1] +"'";
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));
$outp = array();

while($row=mysqli_fetch_assoc($result))
{
$outp[] = $row;
}


echo json_encode($outp);
?>

两者都返回相同的结果,但方法完全不同,所以...根据您的专家意见,这两种不同的样式会出现什么问题?

最佳答案

第一种方法存在严重的安全缺陷。

  1. 它公开了您的数据库的结构。
  2. 它排除直接来自客户端字符串的 SQL 语句

这会使您的数据库容易受到 SQL 注入(inject)攻击。

关于javascript - 在客户端/服务器通信中使用这两种不同的风格有什么优缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42349030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com