目标
目标是为经过身份验证的用户提供库存管理功能。其他访问者只能查阅清单,并过滤他们的发现。
验证
身份验证是通过此处所述的ajaxSession()
javascript函数进行的。
PHP / Ajax : How to show/hide DIV on $_SESSION variable value?
(见答案)PHP: $_SESSION doesn't seem to get set. Any idea?
现在,$.ajax()
委托从PHP服务器获得正确的答案。现在,我只是简单地使用CSS类.hide
和.show
,但出于安全原因,这似乎不是一个好主意。
ajaxSession()
功能
function ajaxSession(actionUrl) {
$.ajax(function() {
url: actionUrl
success: function(authenticated) {
if (authenticated == 'true') {
// create buttons here.
} else {
// ensure to empty those div
}
}
});
}
N.B。在$.ajax()
电话中设置了其他成员,但重要的是那里。
答案 0 :(得分:2)
安全机制应该在服务器端实现!
如果在JS中创建一些特定于登录的按钮,则不存在安全漏洞。确保您不从后端(PHP)输出敏感数据或执行任何未经授权的操作(再次从您的后端)。
始终在服务器端检查(对于每个操作)用户是否已获得授权!
将登录状态存储在会话等中。不要依赖isLoggedIn=1
或POST数据等URL参数。他们来自客户。客户端始终是应用程序中不受信任的部分。
答案 1 :(得分:1)
如果您担心有人猜测它们,您可以使用随机类名而不是隐藏/显示...'230583'或'fss83hjg'等。
如果我理解正确,这就是你要追求的吗?
function ajaxSession(actionUrl) {
$.ajax(function() {
url: actionUrl
success: function(authenticated) {
if (authenticated == 'true') {
// create buttons here.
var buttons = '<input type="button" value="Button 1">'
buttons += '<input type="button" value="Button 2">'
buttons += 'etc...';
$('#button-container-div').html( buttons );
} else {
// ensure to empty those div
$('#button-container-div').html('');
}
}
});
}
在jQuery中创建元素时,应该动态执行它们,以便默认情况下元素不在页面上(参见上文)。但是,如果有人正在寻找(甚至不那么难),他们将能够在您的源代码中看到您正在做的事情,并且可以相当轻松地使用控制台重新创建您在进行身份验证时所做的任何事情......我会建议使用服务器端代码(您使用PHP?)来生成敏感数据。 (见下文)
<?php
// start sessions if you aren't including a global config file that does it for you
session_start();
if($_SESSION['is_logged_in'] == true) {
// logged in, show buttons
$buttons = '<input type="button" value="Button 1">';
$buttons .= '<input type="button" value="Button 2">';
$buttons .= 'etc...';
echo $buttons;
} else {
// not logged in
}
?>
答案 2 :(得分:1)
为了成功:
Function myFunction()
{
var btn=document.createElement("BUTTON");
var t=document.createTextNode("CLICK ME");
btn.appendChild(t);
document.getElementById("theDiv").appendChild(btn);
}
失败
function myFailFunction() {
var node = document.getElementById("theDiv");
while (node.hasChildNodes()) {
node.removeChild(node.lastChild);
}
}