-
信息共享与交流
论坛是网上交流平台,可以让人们分享和讨论问题。通过开发论坛,用户可以发布文章、提出问题、分享经验,从而丰富互联网上的信息资源,并促进知识、经验和观点的交流和共享。
-
社区建设
论坛可以形成一个特定的社区,将具有共同兴趣或目标的人们聚集在一起。这样的社区可以提供一种归属感,让成员们感受到彼此之间的联系和支持。
-
教育和培训
论坛也可以作为一个教育和培训的平台。开发者可以在论坛上发布教程、提供学习资源,帮助用户学习和掌握特定的技能或知识。
-
交流学术问题
讨论课程作业、考试技巧、学习方法等,帮助彼此提高学习成绩和学术能力。
-
分享生活点滴
发布校园生活、兴趣爱好、旅行经历等,增进彼此之间的了解和友谊。
-
寻求帮助和建议
在论坛上提出问题,寻求学长学姐的帮助和建议,更好地应对学习和生活中的挑战。
-
拓展社交圈子
结识志同道合的朋友,扩大自己的社交圈子,为未来的人生道路铺设基石。
-
学术资源分享区
提供学习资料、课程视频、论文库等,方便大学生们查找和下载所需的学术资源。提供就业信息、求职经验、职业规划等,帮助大学生们更好地准备未来的职业生涯。
-
校园活动信息发布
发布校内各类活动信息,如讲座、比赛、社团活动等,让大学生们能够及时了解并参与其中。针对在校大学生的特殊需求,论坛还可以提供一些特别的功能和服务。
-
普通用户
论坛的基本用户群体,可能对各种话题感兴趣,希望在论坛中交流、分享和学习。普通用户是论坛活跃度的基石。
-
专业人士
某些论坛可能专注于特定的领域或行业,例如技术、医疗、法律等。这些论坛通常会吸引相关领域的专业人士,他们可以为论坛提供高质量的内容和建议,帮助论坛更好地发展。
-
企业和品牌
论坛可能会吸引企业和品牌的关注,他们可能希望通过在论坛中发布广告、宣传产品或服务等方式,来扩大品牌知名度和影响力。这些企业和品牌可以为论坛带来一定的经济收益。
-
政府机构和非政府组织
某些论坛可能涉及公共利益和社会问题,因此政府机构和非政府组织也可能成为论坛的面向对象。他们可能希望通过论坛来收集公众意见、宣传政策或项目,以及与其他利益相关者进行沟通和合作。
- 用户模块:作为系统的基础模块,负责用户身份验证和信息管理。其他模块在需要时通过身份验证接口调用用户模块,以确保操作的安全性和合法性。
- 内容管理模块:主要负责对文章信息进行增删查改等操作。通过数据库(MySQL)进行数据的持久化存储,提供给前端模块进行展示。该模块与用户模块紧密关联,可能需要进行身份验证以确定用户权限。
- 系统管理模块:面向后台管理员,主要负责对整个系统进行维护和控制。可能包括系统配置、用户管理、日志查看等功能,对系统的运行状态进行监控和调整。
- 前端展示模块:包括页面布局,导航等,内容列表和详情页面展示,以及响应式设计以适应不同的情况。
-
前端界面
使用HTML、CSS、JavaScript 构建,负责呈现网站的用户界面与用户交互。同时使用了Bootstrap框架来对前端进行快速地搭建
-
Web 服务器 (Apache2 或者 Nginx)
Web服务器负责接受用户的HTTP请求,并向用户展示前端界面,当服务器接收到用户的HTTP请求后,根据请求的URL调用PHP处理器来执行相对应的PHP脚本。
-
PHP 处理器
运行PHP代码,并与MySQL数据库进行交互,处理来自客户端的请求。PHP通过MySQL扩展(例如MySQLi)与MySQL数据库进行通讯,执行数据库操作,列入查询、插入、更新、删除等。完成操作后,根据数据库查询结果,PHP处理器生成动态的HTML内容,并将其返回给Web 服务器,然后Web服务器将HTML内容发送给客户端浏览器进行渲染。
-
MySQL 数据库服务器
MySQL数据库作为网站的数据存储和管理中心,扮演者至关重要的角色。它通过与PHP应用程序和Web服务器建立连接,实现了数据的存储,检索和操作。同时,MySQL服务器还需要充分利用硬件资源,以确定数据库的高性能和稳定运行。整个过程中,MySQL数据库与其他模块相互协作,共同构建了一个完整的网站系统。
- 用户模块接口:用户模块通过前端传输数据,使用 PHP 与服务器上的 MySQL 数据库进行交互。该接口包括用户注册、登录、信息存储和读取等功能,确保用户信息的安全性和一致性。
- 内容管理模块接口:该模块通过类似的方式与数据库进行交互,处理文章、评论等数据。前端界面通过 HTML/CSS/JavaScript 构建,通过 PHP 脚本向数据库发送查询请求,并将结果返回给前端页面进行展示。
- 前端界面接口:前端界面包括首页、登录、发布等各种页面,通过 HTML/CSS/JavaScript 构建。与后端的交互主要通过 PHP 脚本完成,通过 HTTP 请求向后端发送数据请求,并接收后端返回的数据进行展示和交互。
前端运用了Bootstrap框架来对整个网站的前端页面进行了快速的设计,主要包括主页,发布页面和查询页面。同时可以通过在域名的后面加/admin
来进入网站的后端进行信息和用户的管理。
- admins表
admin_id | admin_name | password | createAt | lastLogin |
---|---|---|---|---|
管理员ID | 管理员用户名 | 密码 | 创建时间 | 最后登录 |
- users用户表
user_id | username | password | province | city | create_at | bio | |
---|---|---|---|---|---|---|---|
用户ID | 用户名 | 密码 | 邮箱 | 省份 | 城市 | 创建时间 | 个人简介 |
- posts帖子表
post_id | title | content | author | creation_date | tags | views |
---|---|---|---|---|---|---|
帖子ID | 标题 | 内容 | 作者 | 创建时间 | 标签 | 浏览数 |
- comments评论表
comment_id | post_id | user_id | comment_content | comment_date | likes |
---|---|---|---|---|---|
评论ID | 帖子ID | 用户ID | 评论内容 | 评论日期 | 点赞数 |
- echo 树洞表
echo_id | sender_id | content | sent_at | recevier |
---|---|---|---|---|
信息ID | 发送者ID | 内容 | 发送时间 | 接收者 |
- 身份验证:用户在登录页面输入用户名和密码后,点击登录按钮,前端将用户名和密码通过HTTP POST请求发送给后端PHP处理器。PHP处理器接收到登录请求后,首先对接收到的额用户名进行检查,确保用户名存在,然后使用预处理语句查询数据库,将用户输入的用户名和数据库中的存储密码进行对比,验证用户身份。
- 密码验证:在数据库中存储的密码经过哈希加密存储,因此在验证用户身份时,PHP处理器需要将用户输入的密码进行相同的哈希加密处理,然后与数据库中存储的加密后的密码进行对比。如果两者匹配,说明用户提供的用户名和密码是正确的,允许登录否则失败。
- 动态生成页面内容:通过PHP将从数据库中查询的信息显示到前端页面中,同时读取用户提交的数据进行相应的处理和展示。
- 查询功能:通过用户输入地关键字符,从数据库中的各列中查找是否有关键字符,有则返回这一条数据。
- 分页:在用户所查询到的数据超过特定数字时,会进行分页,规定查询的数字从起始数字到起始数字+每页数字,当用户查看不同页时再改变起始数字。
- 时间跨度:首先从数据库中查询到他的创建日期,然后在获取当前时间,创建一个数组,将年月日作为数组的剑,通过转换将世家跨度的数字一一赋值给这个数组,最后显示。
-
密码加密
在用户注册和登录时,需要输入用户名和密码。注册时的密码会提交给后台php脚本处理并储存到MySQL数据库中,为了防止密码泄露的风险,使用了适当的加密算法对密码进行单向加密,并将哈希加密后的密码储存到数据库中。
-
SQL注入风险
在测试时,我们针对每个页面使用到数据库查询的地方进行了扫描,初次发现一些使用GET方法传参的页面会出现SQL注入漏洞,其次由于开发环境需要查看代码是否错误开启了报错,某些地方出现了报错的漏洞。
对于有SQL语句注入风险的地方。使用了预处理语句,将SQL查询和参数分开执行来防止SQL注入攻击。在预处理阶段,SQL查询中的占位符会被预先定义好,然后再执行阶段将参数与占位符进行绑定,从而使得参数不会被直接解释为SQL代码的一部分。用户输入不会再直接被拼接到SQL查询中,而是被视为数据,因此恶意用户无法通过输入特殊字符来改变SQL查询的语义。其次还关闭了服务器的报错显示。
-
XXS注入风险
在用户留言功能中,可能出现留言框内写入脚本进行恶意攻击。因为php从数据库查询到内容之后会直接显示到前端代码作为一部分显示给用户,而如果查询显示的内容是一个脚本则会被自动执行。
解决方案是在用户输入内容后的传输数据过程内,通过代码进行转义,将用户输入的元素标签销毁掉,这样就不会被前端识别成脚本而运行。
本项目所设计的网站由于是部署在Linux并且安装了Apache2 web服务器和php,MySQL这样的集成环境的,虽然这种环境随处可见,但是为了方便部署以及在其他系统的适用性,本项目还
【填写说明:包括测试报告和技术指标。为了保证作品质量,建议多进行测试,并将测试用例、测试过程、测试结果、修正过程或结果形成文档,也可以将本标题修改为主要测试,撰写主要测试过程结果及其修正;根据测试结果,形成多维度技术指标,包括:运行速度、安全性、扩展性、部署方便性和可用性等。本部分简要说明即可,减少常识性内容。】
本项目已经部署到服务器上,可以直接访问 http://val.arorms.cn
如果要部署到本地,则需要下载相应环境,以下步骤以Linux Debian系统为例
-
安装Apache2 Web服务器
apt update apt install apache2 systemctl enable --now apache2 #设置开机自启动 ```bash
-
配置网站设置 设置文件/etc/apache2/sites-avaliable/xxx.conf,文件内容如下:
<VirtualHost *:80> ServerName <域名> ServerAdmin webmaster@localhost DocumentRoot <源代码根目录> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined #Include conf-available/serve-cgi-bin.conf </VirtualHost>
然后启动虚拟机
a2ensite xxx.conf systemctl reload apache2 #重新加载
-
下载MySQL和PHP
apt install mariadb-server #这里下载的是MariaDB,和MySQL一样 apt install php libapache2-mod-php php-mysql
随后重新加载即可访问。
在本项目的开发中,我们采取了以下措施,促进了团队的协作和任务分工:
- Git分支管理: 我们充分利用Git的分支管理功能,将项目的不同功能模块分配给不同的团队成员进行开发。这样的分工方式使得团队成员可以独立进行工作,提高了开发效率。
- 定期会议: 我们定期召开会议,分享工作进展和遇到的问题,及时进行沟通和协调。这种团队沟通方式有助于发现和解决问题,保证了项目的顺利进行。
- 任务分配: 我们根据团队成员的技术能力和兴趣,合理分配任务,确保了每个人都能发挥自己的优势,完成相应的工作。
- 代码审查: 我们在合并分支之前进行代码审查,以确保代码的质量和规范性。通过相互检查和提出改进建议,促进了团队成员之间的技术交流和学习。
通过以上措施,我们团队成功地完成了项目的开发任务,并且在团队协作和分工方面积累了丰富的经验,为今后的项目开发打下了良好的基础。
在项目开发过程中,我们通过远程操作和服务器管理确保了项目的顺利进行和稳定运行:
- 远程操作工具利用: 使用SSH和Visual Studio Code的远程开发扩展进行远程开发,使团队成员可以方便地在本地编辑器中进行远程服务器上的开发工作。
- 服务器部署和配置: 通过脚本自动化部署和配置服务器,包括安装操作系统、软件包、设置防火墙规则等,提高了效率和减少了出错概率。
- 安全性管理: 定期更新操作系统和软件包,配置安全策略和权限控制,确保了服务器的安全性,防止未经授权的访问和攻击。
- 监控和维护: 定期监控服务器的运行状态和性能指标,及时发现和解决潜在问题,保证了服务器的稳定性和可用性。
通过以上措施,我们有效地进行了远程操作和服务器管理,为项目的顺利进行提供了坚实的基础。