如何使我的PHP项目更安全?

如何使我的PHP项目更安全?,php,javascript,security,css,testing,Php,Javascript,Security,Css,Testing,我正在为我的学院开发一个项目 该项目已获得我所在学院的批准,下周将有5000多名学生参与,项目运行良好,但我担心学生可能会受到黑客和入侵 该项目是一个通知发布门户和技能提升项目,学院管理层将发布新闻,学生可在电子邮件验证后查看。学生们可以上传他们的成就与学院分享,可以分享他们的创造性作品,如应用程序、网络服务等。他们还可以浏览其他学生的技能,这些技能将有助于建立小组 本人已申请下列证券: 我使用了if(isset($\u SESSION['name'])和&isset($\u SESSION[

我正在为我的学院开发一个项目

该项目已获得我所在学院的批准,下周将有5000多名学生参与,项目运行良好,但我担心学生可能会受到黑客和入侵

该项目是一个通知发布门户和技能提升项目,学院管理层将发布新闻,学生可在电子邮件验证后查看。学生们可以上传他们的成就与学院分享,可以分享他们的创造性作品,如应用程序、网络服务等。他们还可以浏览其他学生的技能,这些技能将有助于建立小组

本人已申请下列证券:

  • 我使用了
    if(isset($\u SESSION['name'])和&isset($\u SESSION['email'])
    &&在每页上设置($\u会话['pass'])
    ,以防止未登录 用户

  • mysql\u real\u escape\u字符串($pass)//用于转义特殊字符

  • 密码是使用salt方法加密的(
    Crypt();

  • 注册和文件上载期间的验证限制


我已经搜索并应用了上述安全性,但想知道在这种类型的项目中还需要哪些其他东西,可能需要在.htaccess中添加一些内容?

尝试将此项添加到url参数中以进行加密和说明

$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)));
}
说明:

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是您希望通过URL传递的参数


希望对您有所帮助

可以做一些小的改进:

1) 您只需要存储一个会话,在用户登录后将用户id放入其中

2) 不要再使用mysql了。使用PDO是一个驱动程序,它使您能够使用参数化查询来防止sql注入


3) 要安全地存储密码,请使用bcrypt。这里有一个关于如何使用它的好答案:

没有充分的理由在会话中存储密码(或散列密码,如果您正在这样做的话)。密码是秘密的。你应该非常小心处理别人的秘密

存储唯一名称(或电子邮件)足以确定用户已登录

我还发现了一些其他问题:

  • 顶部登录表单中的密码字段不是“密码”类型。允许肩部冲浪
  • 如果对密码进行了哈希运算,则无需使用
    mysql\u real\u escape\u string()
    。对密码进行哈希运算应该是收到密码后的第一件事
  • 在“帐户”页面上,您已使用“密码”类型字段作为安全答案,但您已使用该值预先填充该字段。这在HTML源代码中提供。你的电话号码是12345
  • php.ini
    中,仍有
    display\u errors
    设置为true
  • 没有SSL。所有密码都将通过您的大学网络以未加密的方式发送
  • 你的问题没有提到
    bcrypt
    ,但应该提到。BCrypt是一种合适的密码哈希算法。(PHP称之为CRYPT_河豚)
  • 使用
    mysql\u real\u escape\u string()
    表示您没有使用准备好的语句和绑定参数。这样做会使SQL注入变得不可能。切换到
    mysqli
    或PDO

我没有尝试向您的服务发送任何异常的POST请求,但我注意到您有一堆在HTML中禁用了编辑的字段。这实际上并不能阻止任何事情。我可以用不同的学生ID提交表单。接收PHP的人能处理这种情况吗?

最简单的方法是SQL注入(假设你使用的是数据库)——甚至有机器人试图通过SQL注入向你的网页插入代码,并发送恶意软件

只要有用户输入参数,我就会保护每个SQL语句(无论它是INSERT/SELECT/UPDATE/DELETE)。对于已经处理得很好的字符串(但请阅读字符集注意事项),对于整数,我将使用(int)输入

只要确保你们经常备份数据库,那个么你们就可以面对任何有创造力的学生了


考虑一下你显示用户输入的方式,人们可能会提交带有
的HTML代码,最好使用htmlspecialchars()将其平铺。

我认为在这个级别上,你的项目没有剩余的了……祝你的项目做得很好,为你的所有授权操作(如添加、编辑、,删除、查看和查找隐藏但可以在控制台中看到的ajax调用,并且可以很容易地看到您的数据库主键(ID)。@Gautam3164:我在这里显示,以便您可以查看门户。对这个项目有什么建议或想法吗?嘿,只是开个玩笑…很好。很高兴为你的大学做这个项目…祝你一切顺利,正如我之前所说,在这个级别上,你几乎做了所有的事情。正如@ManishJangir所说的,准备更安全的URL。就是这样。我希望你的辛勤工作会得到很好的回答。好的问题…让我给你一些时间,我会向你展示Hanks:)。。。。我使用了3个会话值,因为我认为使用某些会话工具的人(可能)可以设置值?有这样的工具吗?密码功能不是很安全吗?谢谢你的反馈:)。。。。顶部登录表单上的密码字段更改为使用JavaScript在单击时键入密码…是的,我在php端处理了它,因为我没有在SQL更新查询中传递禁用的字段…您是如何将其添加到php.ini文件的?对这个项目还有什么建议吗?我使用NoScript来处理javascript,但我知道这是一个不寻常的选择。我没有看到你的php.ini。我在浏览器中看到数据库连接错误。:-)okk:)谢谢:)……数据库连接错误是否有黑客攻击?我应该做更多的更改吗?谢谢,这很有帮助:)……好的,我会保护每个SQL语句:)……还有更多的sug吗