首页 / PHP / 动态网站安全问题(PHP MySQL)
动态网站安全问题(PHP MySQL)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了动态网站安全问题(PHP MySQL),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4934字,纯文字阅读大概需要8分钟。
内容图文
![动态网站安全问题(PHP MySQL)](/upload/InfoBanner/zyjiaocheng/902/e49157fb8af24a6ebdaead6333980bd8.jpg)
我正在编写一个由PHP和MySQL驱动的动态站点(在WAMP服务器上运行).我目前关注的是网站的安全性,但它没有保存任何用户输入,然后输出给任何用户(管理员除外),所以我并不担心XSS.我主要担心的是针对SQL注入攻击和保护管理员登录门户免受彩虹表/暴力破解.
1)将mysql_real_escape_string与sprintf()一起使用可以保护您免受SQL注入吗?例如.,
$thing = mysql_real_escape_string($_REQUEST['thing'])
$query = sprintf("SELECT * FROM table WHERE thing='%s'", $thing);
$result = mysql_query($query);
这足够安全吗?当然,没有系统是完全安全的,但我知道准备好的语句应该是防止SQL注入的最佳方法.但是,如果我的代码“足够安全”,那么我认为没有理由进行更改.我在某处读到mysql_query默认情况下每次调用只允许一次MySQL查询,出于安全原因,这是正确的吗?如果是这样,我不知道如何对我的代码进行任何注射,但如果我的逻辑存在缺陷,请告诉我.
2)我正在为该网站编写一个管理门户,以便它的所有者可以在网站上以一种简单,用户友好的方式操作MySQL数据库(从一个未链接到该网站上任何位置的登录HTML文件) ).我对安全性的关注是登录过程,它由两个页面组成.首先,收集用户登录信息:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<title>Admin Portal</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" type="text/css" href="http://www.anotherdomain.com/my.css">
<script type="text/javascript" src="http://www.anotherdomain.com/my.js"></script>
</head>
<form method="post" action="admin/login.php">
<table align="center">
<tr><th>Admin Login Form</th></tr>
<tr><td>Name</td><td><input type="text" name="Name" size="30" onKeyPress="return aJSFunctionToStopEnterKeyFromWorking(event)"></td></tr>
<tr><td>Password</td><td><input type="password" name="Password" size="30" onKeyPress="return aJSFunctionToStopEnterKeyFromWorking(event)"></td></tr>
<tr><td></td><td><input type="reset" value="Clear Form"> <input type="submit" value="Login"></td></tr>
</table>
</form>
二,实际登录脚本:
<?php
$inputusername = $_POST['Name'];
$inputpassword = $_POST['Password'];
$username = "a username that is not obvious";
$password = "a password that is at least 10 characters long";
$salt = hash('sha512', "a messed up string with weird characters that I wrote");
$hashword = hash('sha512', $password . $salt);
$inputhashword = hash('sha512', $inputpassword . $salt);
if($username == $inputusername && $hashword == $inputhashword) {
session_start();
$_SESSION['valid'] = 1;
header('Location: portal.php');
exit;
}
else {echo "Invalid username or password";}
?>
然后在登录过程之后,每个页面都将具有以下内容以确保管理员已登录:
<?php
session_start();
if(!$_SESSION['valid']) {header('Location: ../admin.html');}
?>
Portal page goes here
由于没有新用户的创建,因此门户网站只会有一个用户.我只是想知道这种登录方法对彩虹表和暴力强制等攻击有多安全?我假设因为我使用了非常大的hashword和salt,所以即使用户名以某种方式已知,也应该对这些类型的攻击非常安全.
我也想知道这是否是安全的会话劫持,因为这是我听到的一个术语,但我不太了解…我知道我不会抛出会话ID或类似的东西,所以看起来很安全.
3)我应该知道/考虑的任何其他安全问题?
我真的很感激我得到的任何帮助!
解决方法:
其他要考虑的要点:
你很容易受到强力攻击
字典攻击会破解您的密码.由于绝大多数用户的密码不安全,因此只是时间问题.使用验证码或记录无效条目.或者在密码不正确时添加一些延迟.
正如牧师皮拉内尔所说,彩虹表并不是你所关心的,因为当有人有一堆哈希并想要破解它们时,它们会被使用.盐被用来获得对彩虹桌的一些保护,这不是你的情况.
2.您以明文形式发送密码
如果有人嗅到你的登录信息(例如,wifi),你就注定了.有一些javascript库可以使用公钥加密任何东西.如果您不想使用SSL,请加密登录/密码,发送到服务器,使用私钥解密,您就更安全了.
3.考虑在MySQL上使用预准备语句
使用预准备语句有助于防止SQL注入,因为即使使用恶意输入它也可以安全地运行:
$dbc = new mysqli("mysql_server_ip", "mysqluser", "mysqlpass", "dbname");
$statement = $db_connection->prepare("SELECT * FROM table WHERE thing='?'");
$statement->bind_param("i", $thing);
$statement->execute();
4.不要在客户端验证中继
在您的登录表单上,您继续使用javascript函数阻止Enter键生效.如果我禁用Javascript怎么办?您可以使用隐藏字段(例如< input type ='hidden'name ='FormIsValid'value ='0'>),使用您的函数来阻止Enter键,并使用onSubmit()函数将FormIsValid更改为1在发送表格之前.在您的服务器中,验证FormIsValid.
你很容易受到会话劫持的攻击
您的会话保存在cookie中,默认名为PHPSESSID.如果攻击者可以获得该cookie,它可以将其发送到您的服务器并窃取您的会话.要防止它,您可以在会话中保存用户IP地址和用户代理,并比较每个请求从会话收到的值.如果值不匹配,则用户IP可能已更改或会话可能已被劫持.
6.您可能容易受到会话固定的影响
如上所述,如果某人说服您的管理员访问某个网站,并且此网站会根据请求向您的网站发送带有PHPSESSID的请求,则您的网站会创建会话,处理登录名/密码,并说明凭据错误.直到现在还不错.
稍后,您的管理员会登录到您的门户,会话已经存在,登录名和密码匹配,并且会话已更新.现在有效的变量是1.
一旦变量更新,攻击者就可以完全访问您的门户,因为他知道PHPSESSID,您的站点不会阻止会话劫持或会话固定.
要避免会话固定和劫持,请参阅#5.
内容总结
以上是互联网集市为您收集整理的动态网站安全问题(PHP MySQL)全部内容,希望文章能够帮你解决动态网站安全问题(PHP MySQL)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。