使用JavaScript安全地发布消息
Posting messages securely with JavaScript
我正在制作一个聊天应用程序,我正在使用一个.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注入的影响。
相关文章:
- Ajax聊天消息重复而不仅仅是更新
- 如果localstorage为空,则显示欢迎消息
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- 离开页面时弹出消息
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 消息显示之外的淘汰验证
- 选项卡侦听器未被来自后台脚本的消息激活
- jQuery在输入下验证post错误消息
- Scipt未在选定选项卡中执行以发送和接收消息
- 检查xmlhttprequest问题的消息
- AngularJs对ng消息的自定义替换
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- 当用户按下回车键时,自动在text区域/text中插入消息
- 如果消息框答案为YES,则用Javascript填写表单
- 在javaservlet doPost方法中启动线程时,无法返回异常消息
- 解析云代码错误:解析.错误{代码:141,消息:“未调用成功/错误”}
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 在AngularJs中隐藏默认错误消息
- 在chrome上显示类似于关闭窗口时的firefox的警报消息.确认消息”;离开"或“;留在这个页面上&quo
- FCM消息通知消息和数据消息(WEB桌面推送通知)