- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
只是为了知识,我想知道使用 Dreamweaver 内置的 PHP 登录注销身份验证功能有多好?
安全吗?
我总是使用 session 、帖子和许多东西来构建登录系统,但是当我使用 Dreamweaver 时,它非常简单而且似乎很安全。仍然需要专家建议,我应该开始使用它还是传统的更好。我没有发现任何限制,只是想知道它是否足够安全。
这是 Dreamweaver 提供的代码:-
这是我的登录表单
<form action="<?php echo $loginFormAction; ?>" method="POST" target="_self">
<input name="ecsuser" class="form-login" title="Username" value="" size="30"
maxlength="2048" />
<input name="ecspass" type="password" class="form-login" title="Password"
value="" size="30" maxlength="2048" />
<?php if(!empty($ERRORMESSAGE)) echo '<div style="color:#FFF;
font-weight:bold;">'.$ERRORMESSAGE.'</div>'; ?>
<input name="" type="submit" value="" />
</form>
这是我的错误处理代码。
<?php
if (isset($_GET['ERRORMESSAGE']))
{
if($_GET['ERRORMESSAGE'] == 1)
{
global $ERRORMESSAGE;
$ERRORMESSAGE = "Sorry! The username or password is incorrect,
Please try again.";
}
}
?>
这是我的进一步代码
// Database Connection Include
<?php require_once('Connections/ecs.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
session_start();
}
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}
if (isset($_POST['ecsuser'])) {
$loginUsername=$_POST['ecsuser'];
$password=md5($_POST['ecspass']);
$MM_fldUserAuthorization = "";
$MM_redirectLoginSuccess = "index.php";
$MM_redirectLoginFailed = "login.php?ERRORMESSAGE=1";
$MM_redirecttoReferrer = false;
mysql_select_db($database_ecs, $ecs);
$LoginRS__query=sprintf("SELECT username, password FROM student WHERE username=%s AND password=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
$LoginRS = mysql_query($LoginRS__query, $ecs) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = "";
if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
另外,我想知道,我们需要采取哪些其他安全措施来构建高效的登录系统,并且上述代码是否 100% 完美,没有安全问题。
最佳答案
Is it secure?
没有。我看到了一些问题:
1)首先存在一个XSS漏洞。当您像那样回显 $_SERVER['PHP_SELF']
时,需要使用 htmlspecialchars()
对其进行转义。如果您不这样做,攻击者可以创建链接,单击该链接时,将窃取 session cookie,这些 cookie 可用于无需用户名和密码即可登录。请参阅:PHP_SELF and XSS
2) GetSQLValueString
有问题。如果 mysql_real_escape_string()
不存在,它将返回到 mysql_escape_string()
。你永远不应该退回到 mysql_escape_string()
。如果 mysql_real_escape_string()
不可用并且您依赖它来避免 SQL 注入(inject),您的应用程序应该停止。该函数还在知道数据是什么数据类型之前对数据进行转义。如果您正在使用 intval()、floatval()、doubleval(),则无需先执行 mysql_real_escape_string()
。
我建议将其更改为使用 MySQLi 或 PDO 参数化查询,它们会自动为您处理转义。
MySQLi:http://php.net/manual/en/mysqli.prepare.phpPDO: http://us2.php.net/manual/en/book.pdo.php
3) 它似乎在尝试(但失败了)在成功登录后重定向到上一页。除非您已对 URL 进行硬编码或已验证用户提供的 URL,否则您永远不应重定向,否则您可能容易受到开放重定向/网络钓鱼攻击。看起来有人可能试图通过在此处的 if
中添加 false
来解决此问题:if (isset($_SESSION['PrevUrl']) && false) {
,此语句永远不会评估为 true
,因此保留它毫无意义。
4).看看这一行:
$LoginRS = mysql_query($LoginRS__query, $ecs) or die(mysql_error());
如果执行此查询时出现任何 MySQL 错误,应用程序将打印出完整的 MySQL 错误,然后停止。这对任何试图执行 SQL 注入(inject)攻击的人都非常有帮助。即使您已经针对 SQL 注入(inject)进行了保护,这仍然会告诉世界您的数据库结构的各个部分。您应该使用 trigger_error()
或进行您自己的错误记录,但切勿在生产/实时/公共(public)系统中将其显示给用户。
5).最后,可以对登录/退出表单执行 XSRF 攻击。在提交登录/注销等操作时,您应该使用反 XSRF token 。请参阅:http://en.wikipedia.org/wiki/Cross-site_request_forgery
关于php - Dreamweaver PHP 登录注销有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9680138/
你们中的任何一个 Dreamweaver 用户是否都遇到过这样的情况:您在编程时发现自己一遍又一遍地使用特定的代码片段... 以及以上?看,我整天使用以下代码: 问题:无论如何,你们程序员是否找到了
是否有 Dreamweaver CS5 的标准功能或插件允许像在 Notepad++ 中一样突出显示标签? 当您在 Notepad++ 中单击一个标签时,开始标签和结束标签都会突出显示,并且它们之间有
我只是为 webdevelopers 编写一个 html 页面。为方便起见,我使用 php 包含。例如在 index.php 我有 其中包括所有 css 和 js 文件。 Dreamweaver cc
有没有办法禁用第二个单引号的自动写入'当您按下第一个 ' ? 键入 ' 时使用 Dreamweaver它会自动添加第二个 ' . 有什么办法可以禁用这个吗? 最佳答案 编辑、首选项、代码提示。取消选中
我在访问变量时遇到了一些麻烦,在这种情况下是 Setvariable。当我进入循环时,变量不存在。任何人都对此有任何见解。感谢你的帮助 下面是我在模板中的代码部分。当你有机会时,你会帮忙吗?谢谢。
我不太确定这是否会在 SU 或这里进行,但我认为这里的人更有可能找到答案。 每个人都知道 80 个字符的列规则,对吗?我希望能够遵循这一点,但我使用 Dreamweaver,到目前为止我还无法找到一种
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 去年关闭。 Improve this
我已经设置了远程服务器,因此单击该文件会将其下载到我的本地文件夹。进行一些更改后,我必须单击“与服务器同步”等。 当我简单地保存文件时,有没有办法与服务器同步? 谢谢 最佳答案 如上所述,这确实不是一
我们有一个复合 CT,它输出一个组件的代码字段。 CT的织梦部分如下: @@Component.HTMLCode@@ 但是,此 CT 在页面上显示代码字段,而不是转换为 HTML。 例如:
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
你好, 我想知道你是否可以帮助我。 我知道它不完全与编程相关,但有点相关 我是一名初级 Web 开发人员,主要从事 PHP、MySQL、Javascript 和 HTML 工作,我并不真正接触设计。
密码如何编码或解码以retrieve a password from an Adobe Dreamweaver *.ste file ,或者动态创 build 计为导入 Dreamweaver 的 *
是否可以将设计预览从代码 View 中分离出来,以便在第二个显示器上使用? 最佳答案 如果您不喜欢 Split View(垂直或水平),您可以使用代码检查器(Window -> Code Inspec
如何在使用 let 时让 Dreamweaver CS6 不出现语法错误而不是 var ? 最佳答案 好的,只需转到: 编辑 > 首选项 > Linting 然后编辑 JS 文件。 添加此属性: "e
setup Using Dreamweaver CS 5.5 / Windows 7 I have turned off 'Preview [in browser] using temporary f
有什么方法可以隐藏或限制“属性” Pane 中“样式”下拉框中可用的 CSS 类? 我有几个用于页眉、页脚、导航或其他专门领域的类,这些类不应该让寻找少数通用类的人感到困惑。恐怕几个月后我会再次看到
我对网页设计完全陌生,但我必须将我组织的旧网站改成新网站。我需要将该站点安装到 Dreamweaver 中,这样我就可以开始更改文本和图像并修复不起作用的链接。我基本上是在没有任何说明的情况下收到了一
我已经改变了 Extensions.txt Program Files (x86)\Adobe\Adobe Dreamweaver CS5.5\Configuration 我改变了 MMDocumen
我在tridion中有一个组件,该组件的元数据设计中有一个名为“列表”的字段,该字段使用类别和关键字填充 我使用DWT TBB,使用以下代码使用DWT代码填充列表中存在的项目
Emmet现在支持Dreamweaver,并且渴望使用它,但是它对我不起作用,即使我认为我已经按照此处的指示进行操作https://github.com/emmetio/dreamweaver 我已经
我是一名优秀的程序员,十分优秀!