我正在为我的大学开发一个项目。
该项目得到了我的大学的批准,并将在下周为5000名以上的学生提供服务,项目运作良好,但我担心学生可以进行黑客攻击。
该项目是一个通知发布门户和技能推广项目,大学管理层将发布新闻,学生可以在电子邮件验证后查看。学生可以上传他们的成就与大学分享,可以分享他们的创意作品,如应用程序,网络服务等。他们还可以浏览其他学生的技能,这些学生的个人资料将有助于组织。
我申请了以下证券:
我在每个页面上都使用if(isset($_SESSION['name']) && isset($_SESSION['email'])
&& isset($_SESSION['pass']))
来防止未登录
用户。
mysql_real_escape_string($pass);
//用于转义特殊字符。
使用salt方法(Crypt();
)加密密码。
注册期间的验证&文件上传限制。
我已经搜索并应用了上述证券,但想知道这类项目需要哪些其他东西,也许在.htaccess中有一些补充?
答案 0 :(得分:3)
可以做一些小的改进:
1)您只需要存储一个会话,您可以在登录后将用户ID放入其中。
2)不要再使用mysql了。使用PDO它是一个驱动程序,使您可以使用参数化查询来防止SQL注入。
3)为了安全地存储密码,请使用bcrypt这是一个很好的答案:Link
答案 1 :(得分:2)
没有充分的理由在会话中存储密码(或散列的密码,如果这是您正在做的事情)。密码是秘密。你应该非常小心如何处理别人的秘密。
存储唯一名称(或电子邮件)足以确定用户已登录。
我发现的其他一些问题:
mysql_real_escape_string()
。哈希密码应该是你收到密码后首先要做的事情。12345
。display_errors
仍然php.ini
设置为true。bcrypt
,但它应该。 BCrypt是一种适当的密码哈希算法。 (PHP称之为CRYPT_BLOWFISH)。mysql_real_escape_string()
表示您没有使用预准备语句和绑定参数。这样做会使SQL注入变得不可能。切换到mysqli
或PDO。我没有尝试对您的服务发出任何异常的POST请求,但我注意到您有一堆字段在HTML中禁用了编辑。这实际上并没有阻止任何事情。我可以使用不同的学生证提交该表格。接收PHP是否处理这种情况?
答案 2 :(得分:2)
搞砸的最简单方法是使用SQL注入(假设您正在使用数据库) - 甚至有机器人尝试通过SQL注入和传递恶意软件将代码插入您的网页
只要有用户输入参数,我就会保护每个SQL语句(无论它是INSERT / SELECT / UPDATE / DELETE)。对于你已经处理好的字符串(但是对于charset警告,请阅读http://php.net/manual/en/function.mysql-real-escape-string.php),对于整数,我会使用(int)输入。
只要确保你经常备份数据库,那么你就可以面对任何有创造力的学生了。
考虑一下您显示用户输入的方式,人们可能会使用<scripts>
提交HTML代码,最好使用htmlspecialchars()
答案 3 :(得分:1)
尝试使用此网址加密和解密的网址参数
$salt ='The key you can use anything';
<强>加密强>
function simple_encrypt($text)
{
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}
<强>能解密:强>
function simple_decrypt($text)
{
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
此处$ text是您要通过网址传递的参数
希望它对你有所帮助