我正在制作一个聊天应用程序,我正在使用一个.htaccess
文件来防止外部来源读取消息。但是,这也会阻止JavaScript发送消息。我的JavaScript是:
$("#sendMsg").onclick(function(){
$.post('post.php',
{ msg : $("#msgBox").val(), user : getCookie('username')},
function(result) {alert(result);});
});
我的post.php
PHP是:
<?php
$message = $_POST['msg'];
$user = $_POST['user'];
$servername = "localhost:3306";
$username = "user";
$password = "pass";
$dbname = "dbname";
$conn = mysqli_connect($servername, $username, $password, $dbname);
$sql = "INSERT INTO tablename (username, message) VALUES ('" . $user . "', '" . $message . "'); SELECT * FROM tablename";
$result = mysqli_query($conn, $sql);
$numofmessages = 0
while($row = mysqli_fetch_assoc($result)) {
$numofmessages++;
echo $numofmessages;
?>
编辑:.htaccess
文件具有:
order deny, allow
<FilesMatch "post.php">
deny from all
</FilesMatch>
如果没有.htaccess
文件,任何人都可以向post.php
文件发送POST请求以添加消息,但如果有.htaccess
文件,JavaScript也不能发送POST请求。有人能解决这个问题吗?
您的问题是所有身份验证似乎都发生在客户端。您不能这样做,因为客户端可以修改任何内容。在您的情况下,任何人都可以伪造用户名cookie,或者只是自己制作请求。由于客户端可以完全控制他们发送的请求类型,因此不能只允许通过脚本进行访问。
如果您只希望特定的客户端能够使用用户名,则需要让客户端登录到您的应用程序中。可能最简单的方法是使用PHP会话。客户端现在登录,应用程序在会话变量中设置用户名,并自动将会话标识符发送回客户端。该会话标识符在每个后续请求中都会使用,您可以使用该标识符检索用户名。
session_start();
if(empty($_SESSION['username'])) {
header("Location: login.php");
}
除此之外,还要研究如何保护自己免受sql注入的影响。