php 脚本参数的安全性
Security for arguments going to a php script
我目前正在使用 HTML、CSS、JavaScript 和 PHP 开发注册和登录系统。
到期
用户在 html 的 CSS 样式输入字段中输入他的电子邮件和密码。现在,如果用户按下登录按钮,JavaScript 将获取这些输入字段的用户电子邮件和密码,并使用参数电子邮件和密码调用 login.php 脚本。 PHP 脚本的主要工作是 returns 对 JavaScript 的访问或拒绝。最后 JavaScript 显示用户错误或根据 PHP 脚本答案授予访问权限。
Javascript
的详细片段
function loginuser(email, password) {
if (email || password) {
query('./php/login.php', null, [['email', email], ['password', password]]).then(function(obj) {
console.log("REPLY");
if (obj.error) {
//ERROR
}
else {
//ACCESS
}
});
}
else {
//PASSWORD , EMAIL CAN NOT BE EMPTY
}
}
function query(url, cmd_type, data_array) {
var request = new XMLHttpRequest();
var params= '';
params = params + 'cmdtype=' + encodeURIComponent(cmd_type) + '&';
if (data_array) {
data_array.forEach(function(item) {
if (Array.isArray(item[1])) {
var serialized_tda = '';
item[1].forEach(function(tdai) {
serialized_tda = serialized_tda + "|" + tdai[0] + "," + tdai[1] + "|";
});
params = params + item[0] + '=' + encodeURIComponent(serialized_tda) + '&';
}
else {
params = params + item[0] + '=' + encodeURIComponent(item[1]) + '&';
}
});
}
return new Promise(function(resolve, reject) {
request.open('POST', url, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE) {
if (request.status === 200) {
var response = JSON.parse(request.response);
resolve(response);
}
else {
resolve({error: 'Cant connect!'});
}
}
};
request.send(params);
});
}
疑惑-问题
由于我正在调用带有参数的脚本,因此可以在浏览器开发控制台的网络选项卡中找到它以及我发送的所有参数。
当我稍后在生产中使用 SSL 证书时,这是否会消失,我是否必须先加密 JavaScript 中的数据,然后才能通过参数将其发送到 php 还是这是正常的?
不,使用 SSL 不会导致该信息从生产中的“网络”选项卡中消失。
SSL 加密客户端(即登录的用户)和处理它的服务器之间的数据。以纯文本形式发送它通常是可以的,只要它始终通过 HTTPS,因为这将加密流量并使其对任何嗅探攻击毫无意义。
此外,网络选项卡中的信息仅对输入密码的客户端可见(因此他们知道),因此不应将其视为您应用的安全漏洞。
- Html 点击“提交”发送表格
- 浏览器记录包内容
- 如果您访问 https 站点,浏览器会加密数据
- 浏览器发送加密数据
- 服务器收到您的请求
您看到了步骤 2
内容
正如前面的回答所说,浏览器的开发者工具只显示浏览器看到的内容。一旦它通过 HTTPS 离开您的浏览器,它就会被加密。
不再建议在发送前在应用程序中加密密码,因为总会有其他一些安全隐患。例如,这是在 HTTP 摘要身份验证中实现的,其影响是必须在服务器上存储未经哈希处理的密码。
以明文形式发送您的密码。确保您的服务器仅接受 HTTPS(永久重定向)并将其以散列形式存储在服务器上。
我目前正在使用 HTML、CSS、JavaScript 和 PHP 开发注册和登录系统。
到期
用户在 html 的 CSS 样式输入字段中输入他的电子邮件和密码。现在,如果用户按下登录按钮,JavaScript 将获取这些输入字段的用户电子邮件和密码,并使用参数电子邮件和密码调用 login.php 脚本。 PHP 脚本的主要工作是 returns 对 JavaScript 的访问或拒绝。最后 JavaScript 显示用户错误或根据 PHP 脚本答案授予访问权限。
Javascript
的详细片段function loginuser(email, password) {
if (email || password) {
query('./php/login.php', null, [['email', email], ['password', password]]).then(function(obj) {
console.log("REPLY");
if (obj.error) {
//ERROR
}
else {
//ACCESS
}
});
}
else {
//PASSWORD , EMAIL CAN NOT BE EMPTY
}
}
function query(url, cmd_type, data_array) {
var request = new XMLHttpRequest();
var params= '';
params = params + 'cmdtype=' + encodeURIComponent(cmd_type) + '&';
if (data_array) {
data_array.forEach(function(item) {
if (Array.isArray(item[1])) {
var serialized_tda = '';
item[1].forEach(function(tdai) {
serialized_tda = serialized_tda + "|" + tdai[0] + "," + tdai[1] + "|";
});
params = params + item[0] + '=' + encodeURIComponent(serialized_tda) + '&';
}
else {
params = params + item[0] + '=' + encodeURIComponent(item[1]) + '&';
}
});
}
return new Promise(function(resolve, reject) {
request.open('POST', url, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE) {
if (request.status === 200) {
var response = JSON.parse(request.response);
resolve(response);
}
else {
resolve({error: 'Cant connect!'});
}
}
};
request.send(params);
});
}
疑惑-问题
由于我正在调用带有参数的脚本,因此可以在浏览器开发控制台的网络选项卡中找到它以及我发送的所有参数。
当我稍后在生产中使用 SSL 证书时,这是否会消失,我是否必须先加密 JavaScript 中的数据,然后才能通过参数将其发送到 php 还是这是正常的?
不,使用 SSL 不会导致该信息从生产中的“网络”选项卡中消失。
SSL 加密客户端(即登录的用户)和处理它的服务器之间的数据。以纯文本形式发送它通常是可以的,只要它始终通过 HTTPS,因为这将加密流量并使其对任何嗅探攻击毫无意义。
此外,网络选项卡中的信息仅对输入密码的客户端可见(因此他们知道),因此不应将其视为您应用的安全漏洞。
- Html 点击“提交”发送表格
- 浏览器记录包内容
- 如果您访问 https 站点,浏览器会加密数据
- 浏览器发送加密数据
- 服务器收到您的请求
您看到了步骤 2
内容
正如前面的回答所说,浏览器的开发者工具只显示浏览器看到的内容。一旦它通过 HTTPS 离开您的浏览器,它就会被加密。
不再建议在发送前在应用程序中加密密码,因为总会有其他一些安全隐患。例如,这是在 HTTP 摘要身份验证中实现的,其影响是必须在服务器上存储未经哈希处理的密码。
以明文形式发送您的密码。确保您的服务器仅接受 HTTPS(永久重定向)并将其以散列形式存储在服务器上。