2016-05-17 70 views
0

我一直在这里已经有很长一段时间了,我几乎没有使用PHP的经验,并且我只从JavaScript开始。使用JS在服务器上运行PHP脚本

我试图从网页上的JavaScript使用AJAX运行我的服务器上的PHP脚本。说实话,我对自己在做什么没有太多的想法。

我当前的代码:

JS:

function Write() { 
    $.ajax({ 
     type: "POST", 
     url: "Write.php", 
     data: { 
      'GUID': "12345678987654321", 
      'IP': "127.0.0.2", 
      'USERNAME': "George", 
      'BAN_REASON': "Broke my pencil." 
     }, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
} 

PHP:

<?php 
exec("java -jar Database.jar '.$_POST['GUID']' '.$_POST['IP']' '.$_POST['USERNAME']' '.$_POST['BAN_REASON']'"); 
?> 

(我也不太完全相信,我这样做正确的字符串,等等,帮助将不胜感激)

基本上,该PHP代码是使用我写的一个Java程序写MySQL数据库使用由PHP“exec()”发送的参数。它根本不写入数据库,所以我认为它是AJAX转到PHP函数的东西。

当“写()”的跑了,它是所有打印出来的PHP代码到控制台...

新规范

<?php 

//Server 
$servername = "localhost"; 
$dbusername = $_POST['DB_USERNAME']; 
$password = $_POST['DB_PASSWORD']; 
$dbname = "bansdb"; 

$username = $_POST['USERNAME']; 
$guid = $_POST['GUID']; 
$ip = $_POST['IP']; 
$ban_reason = $_POST['BAN_REASON']; 

$connection = new mysqli($servername, $dbusername, $password, $dbname); 

if ($connection->connect_error) { 
    die("Connection Failed: " . $connection->connect_error); 
} 

$sql = "INSERT INTO bans (GUID, IP, USERNAME, BAN_REASON) 
VALUES ('$guid', '$ip', '$username', '$ban_reason')"; 

if (mysqli_query($connection, $sql)) { 
    echo "Ban successfully added."; 
} else { 
    echo "Error: " . $sql . mysqli_error($connection); 
} 

mysqli_close($connection); 

?> 
+1

你用双引号封装,而不是单个。这种方法也存在巨大的安全缺陷。例如这个''。$ _ POST ['GUID']''不是连接的。为什么不使用PHP的'mysqli'或'PDO'写数据库? – chris85

+0

是的,我想要设置它的方式是用户必须在网页上提供一个密码,然后传递给“Database.jar”。所以如果密码不正确,它将无法对MySQL做任何事情。 如果还有其他缺陷,请告诉我。我对这一切都很陌生,所以我的方法可能会出现明显的问题。 – Daedalus

+2

为什么不用PHP做这一切?同时将用户数据直接传递给命令行可以打开各种注入。 – chris85

回答

1

我不会将您的数据库用户/密码通过 网络。只需制作一个简单的应用程序密码并使用db用户名/密码(在HTML修改表单中输入APP_PASSWORD)静态地将密码存储在PHP中。除了关闭SQL注入之外的参数化查询,您还可以在您的值中使用单引号,并且不必担心查询中断(驱动程序处理引用)。

<?php 
//Server 
$servername = "localhost"; 
$dbusername = 'static_db_user';//$_POST['DB_USERNAME']; 
$password = 'staticpassword';//$_POST['DB_PASSWORD']; 
$dbname = "bansdb"; 
if($_POST['APP_PASSWORD'] != 'Some generic password') { 
    die('Invalid Credentials'); 
} 
$username = $_POST['USERNAME']; 
$guid = $_POST['GUID']; 
$ip = $_POST['IP']; // I would store IP as an unsigned int, ip2long 
$ban_reason = $_POST['BAN_REASON']; 

$connection = new mysqli($servername, $dbusername, $password, $dbname); 

if ($connection->connect_error) { 
    die("Connection Failed: " . $connection->connect_error); 
} 

$sql = "INSERT INTO bans (GUID, IP, USERNAME, BAN_REASON) 
VALUES (?,?,?,?)"; 
if ($stmt = mysqli_prepare($connection, $sql)) { 
    mysqli_stmt_bind_param($stmt, , 'ssss', $guid, $ip, $username, $ban_reason; 
    if(mysqli_stmt_execute($stmt)) { 
     echo "Ban successfully added."; 
    } else { 
     echo "Execute Error: " . $sql . mysqli_error($connection); 
    } 
} else { 
    echo "Prepare Error: " . $sql . mysqli_error($connection); 
} 
mysqli_close($connection); 

?> 
+0

我对这一切还是很陌生的,但是有人可能不只是一起来下载PHP文件,然后获得存储在其中的密码? – Daedalus

+1

不,PHP根据您的服务器配置文件(应由PHP进程处理)。您可以将密码移动到非Web可访问的目录,然后使用PHP的include文件包含该文件。如果这种情况发生,即使PHP数据被暴露(这应该是非常罕见的开始),该文件将不会有密码。 – chris85

+0

所有的工作都很好,除了一个错误,但项目已被废弃。耗时15小时。 噢,至少我获得了一些JS和PHP的经验!很有趣,谢谢你的帮助,克里斯。 – Daedalus

0

它是所有打印出来的PHP代码到控制台...

您是否有配置为执行PHP代码的Web服务器?你必须认识到,你不能在你的“服务器”上的文件系统打开的浏览器中运行一个普通的php文件。

创建一个名为info.php的新文件并将其保存到您的Web服务器。它只应该是这样的:

<?php 
phpinfo(); 

如果您在浏览时看到该代码,则说明您没有启用PHP。否则,你会看到很多关于你的配置的信息。


不太完全相信,我这样做字符串正确

相当接近,但你应该read up的一些quotes

这可能会为你工作:

<?php 
exec("java -jar Database.jar $_POST[GUID] $_POST[IP] $_POST[USERNAME] $_POST[BAN_REASON]"); 
+1

您应该使用该方法添加有关壳注射剂的注释。 – chris85

+0

@ chris85在行动!我赞成你对这个问题的评论,以及几乎所有其他问题。在这方面还有很多可以说的,但我想挑选一个可以消化的开始,指出所提出的具体问题。 –

相关问题