苏州 互联网企业/seo点击软件排名优化

苏州 互联网企业,seo点击软件排名优化,专业做互联网招聘的网站有哪些,郴州宸轩网络科技有限公司要改造 phpcms 的后台登录,使其前端使用加密方式提交,后端解密,你可以采用 RSA 非对称加密 或 AES 对称加密 方式来增强安全性。 方案设计 前端加密 生成公私钥对(推荐使用 RSA)。前端使用公钥加密密码,然…

要改造 phpcms 的后台登录,使其前端使用加密方式提交,后端解密,你可以采用 RSA 非对称加密AES 对称加密 方式来增强安全性。 

方案设计

  1. 前端加密

    • 生成公私钥对(推荐使用 RSA)。
    • 前端使用公钥加密密码,然后提交给后端。
    • 避免明文密码在网络中传输。
  2. 后端解密

    • 后端使用私钥解密前端传输的密码。
    • 然后继续使用原有的用户验证逻辑

目录

改造前

改造好后

改造方法 


改造前

改造好后

改造方法 

# 生成私钥
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048# 生成公钥
openssl rsa -pubout -in private_key.pem -out public_key.pem

 

 前端phpcms\modules\admin\templates\login.tpl.php

<?php defined('IN_ADMIN') or exit('No permission resources.'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET;?>" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<title><?php echo L('phpcms_logon')?></title>
<style type="text/css">div{overflow:hidden; *display:inline-block;}div{*display:block;}.login_box{background:url(<?php echo IMG_PATH?>admin_img/login_bg.jpg) no-repeat; width:602px; height:416px; overflow:hidden; position:absolute; left:50%; top:50%; margin-left:-301px; margin-top:-208px;}.login_iptbox{bottom:90px;_bottom:72px;color:#FFFFFF;font-size:12px;height:30px;left:50%;
margin-left:-280px;position:absolute;width:560px; overflow:visible;}.login_iptbox .ipt{height:24px; width:110px; margin-right:22px; color:#fff; background:url(<?php echo IMG_PATH?>admin_img/ipt_bg.jpg) repeat-x; *line-height:24px; border:none; color:#000; overflow:hidden;}<?php if(SYS_STYLE=='en'){ ?>.login_iptbox .ipt{width:100px; margin-right:12px;}<?php }?>.login_iptbox label{ *position:relative; *top:-6px;}.login_iptbox .ipt_reg{margin-left:12px;width:46px; margin-right:16px; background:url(<?php echo IMG_PATH?>admin_img/ipt_bg.jpg) repeat-x; *overflow:hidden;text-align:left;padding:2px 0 2px 5px;font-size:16px;font-weight:bold;}.login_tj_btn{ background:url(<?php echo IMG_PATH?>admin_img/login_dl_btn.jpg) no-repeat 0px 0px; width:52px; height:24px; margin-left:16px; border:none; cursor:pointer; padding:0px; float:right;}.yzm{position:absolute; background:url(<?php echo IMG_PATH?>admin_img/login_ts140x89.gif) no-repeat; width:140px; height:89px;right:56px;top:-96px; text-align:center; font-size:12px; display:none;}.yzm a:link,.yzm a:visited{color:#036;text-decoration:none;}.yzm a:hover{color:#C30;}.yzm img{cursor:pointer; margin:4px auto 7px; width:130px; height:50px; border:1px solid #fff;}.cr{font-size:12px;font-style:inherit;text-align:center;color:#ccc;width:100%; position:absolute; bottom:58px;}.cr a{color:#ccc;text-decoration:none;}
</style><script src="http://zxjw.gov:800/statics/js/jsencrypt.min.js"></script><script>
document.addEventListener("DOMContentLoaded", function () {document.getElementById("loginForm").addEventListener("submit", function (event) {event.preventDefault(); // 阻止默认提交行为var username = document.getElementById("username").value;var password = document.getElementById("password").value;// 这里替换成你的 RSA 公钥var publicKey = `-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----
`;var encrypt = new JSEncrypt();encrypt.setPublicKey(publicKey);var encryptedPassword = encrypt.encrypt(password);// 通过 AJAX 提交加密后的密码var formData = new FormData();formData.append("username", username);formData.append("password", encryptedPassword);formData.append("code", document.getElementById("code").value);formData.append("dosubmit", "1");fetch("index.php?m=admin&c=index&a=login&dosubmit=1", {method: "POST",body: formData}).then(response => response.text()).then(data => console.log(data));});
});
</script>
</head><body>
<div id="login_bg" class="login_box"><div class="login_iptbox"><form id="loginForm"><label><?php echo L('username')?>:</label><input id="username" name="username" type="text" class="ipt" value="" /><label><?php echo L('password')?>:</label><input id="password" name="password" type="text" class="ipt" value="" /><label><?php echo L('security_code')?>:</label><input id="code" name="code" type="text" class="ipt ipt_reg" onfocus="document.getElementById('yzm').style.display='block'" /><div id="yzm" class="yzm"><?php echo form::checkcode('code_img')?><br /><a href="javascript:document.getElementById('code_img').src='<?php echo SITE_PROTOCOL.SITE_URL.WEB_PATH;?>api.php?op=checkcode&m=admin&c=index&a=checkcode&time='+Math.random();void(0);"><?php echo L('click_change_validate')?></a></div><input type="submit" class="login_tj_btn" value=""/></form></div><div class="cr"><?php echo L("copyright")?></div>
</div>
</body>
</html>

后端phpcms\modules\admin\index.php

public function login() {if(isset($_GET['dosubmit'])) {// 不是口令卡验证if (!isset($_GET['card'])) {$username = isset($_POST['username']) ? trim($_POST['username']) : showmessage(L('nameerror'), HTTP_REFERER);$code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER);if ($_SESSION['code'] != strtolower($code)) {$_SESSION['code'] = '';showmessage(L('code_error'), HTTP_REFERER);}$_SESSION['code'] = '';} else { // 口令卡验证if (!isset($_SESSION['card_verif']) || $_SESSION['card_verif'] != 1) {showmessage(L('your_password_card_is_not_validate'), '?m=admin&c=index&a=public_card');}$username = $_SESSION['card_username'] ? $_SESSION['card_username'] : showmessage(L('nameerror'), HTTP_REFERER);}if (!is_username($username)) {showmessage(L('username_illegal'), HTTP_REFERER);}// 检查密码错误次数$this->times_db = pc_base::load_model('times_model');$rtime = $this->times_db->get_one(array('username' => $username, 'isadmin' => 1));$maxloginfailedtimes = getcache('common', 'commons');$maxloginfailedtimes = (int)$maxloginfailedtimes['maxloginfailedtimes'];if ($rtime['times'] >= $maxloginfailedtimes) {$minute = 60 - floor((SYS_TIME - $rtime['logintime']) / 60);if ($minute > 0) showmessage(L('wait_1_hour', array('minute' => $minute)));}// 查询帐号$r = $this->db->get_one(array('username' => $username));if (!$r) showmessage(L('user_not_exist'), '?m=admin&c=index&a=login');// **RSA 解密密码**$privateKey = file_get_contents("D:/phpstudy_pro/WWW/private_key.pem");$encryptedPassword = $_POST['password'];openssl_private_decrypt(base64_decode($encryptedPassword), $decryptedPassword, $privateKey);if (!$decryptedPassword) {showmessage(L('password_decrypt_error'), '?m=admin&c=index&a=login');}// 进行密码匹配$password = md5(md5(trim($decryptedPassword)) . $r['encrypt']);if ($r['password'] != $password) {$ip = ip();if ($rtime && $rtime['times'] < $maxloginfailedtimes) {$times = $maxloginfailedtimes - intval($rtime['times']);$this->times_db->update(array('ip' => $ip, 'isadmin' => 1, 'times' => '+=1'), array('username' => $username));} else {$this->times_db->delete(array('username' => $username, 'isadmin' => 1));$this->times_db->insert(array('username' => $username, 'ip' => $ip, 'isadmin' => 1, 'logintime' => SYS_TIME, 'times' => 1));$times = $maxloginfailedtimes;}showmessage(L('password_error', array('times' => $times)), '?m=admin&c=index&a=login', 1000);}// 登录成功,清空错误次数记录$this->times_db->delete(array('username' => $username));// 口令卡验证if (!isset($_GET['card']) && $r['card'] && pc_base::load_config('system', 'safe_card') == 1) {$_SESSION['card_username'] = $username;$_SESSION['card_password'] = $_POST['password'];header("location:?m=admin&c=index&a=public_card");exit;} elseif (isset($_GET['card']) && pc_base::load_config('system', 'safe_card') == 1 && $r['card']) {$_SESSION['card_username'] = '';$_SESSION['card_password'] = '';$_SESSION['card_verif'] = '';}// 更新最后登录信息$this->db->update(array('lastloginip' => ip(), 'lastlogintime' => SYS_TIME), array('userid' => $r['userid']));$_SESSION['userid'] = $r['userid'];$_SESSION['roleid'] = $r['roleid'];$_SESSION['pc_hash'] = random(6, 'abcdefghigklmnopqrstuvwxwyABCDEFGHIGKLMNOPQRSTUVWXWY0123456789');$_SESSION['lock_screen'] = 0;// 设置 Cookie$default_siteid = self::return_siteid();$cookie_time = SYS_TIME + 86400 * 30;if (!$r['lang']) $r['lang'] = 'zh-cn';param::set_cookie('admin_username', $username, $cookie_time);param::set_cookie('siteid', $default_siteid, $cookie_time);param::set_cookie('userid', $r['userid'], $cookie_time);param::set_cookie('admin_email', $r['email'], $cookie_time);param::set_cookie('sys_lang', $r['lang'], $cookie_time);echo showmessage(L('login_success'), '?m=admin&c=index');// 检查是否启用 vms$video_setting = getcache('video', 'video');if ($video_setting['sn'] && $video_setting['skey']) {$vmsapi = pc_base::load_app_class('ku6api', 'video');$vmsapi->member_login_vms();}} else {pc_base::load_sys_class('form', '', 0);include $this->admin_tpl('login');}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FANUC机器人几种常用的通讯网络及接口

FANUC机器人几种常用的通讯网络及接口 Devicenet 网络通讯接口&#xff0c;接口为5针线 (规定用的机架为 81-84&#xff09; PROFIBUS 网络通讯接口&#xff0c;针脚为2针&#xff08;规定用的机架为 67&#xff09; Intemet 网络通讯接口&#xff08;常用的网线接口&#xf…

CentOS8+Zabbix7.2.4解决中文显示问题

#cd /usr/share/zabbix/ui/include/ #grep graphfont defines.inc.php define(‘ZBX_GRAPH_FONT_NAME’, ‘graphfont’); // font file name define(‘ZBX_FONT_NAME’, ‘graphfont’); #ll /usr/share/zabbix/ui/assets/fonts/graphfont.ttf lrwxrwxrwx. 1 root root 36 3…

AI自动化编程初探

先说vscodeclinemodelscope方案&#xff0c;后面体验trae或者cursor再写写其它的。vscode和trae方案目前来说是免费的&#xff0c;cursor要用claud需要付费&#xff0c;而且不便宜&#xff0c;当然效果可能是最好的。 vscode方案&#xff0c;我的经验是最好在ubuntu上&#xff…

101.在 Vue 3 + OpenLayers 使用 declutter 避免文字标签重叠

1. 前言 在使用 OpenLayers 进行地图开发时&#xff0c;我们经常需要在地图上添加点、线、区域等图形&#xff0c;并给它们附加文字标签。但当地图上的标注较多时&#xff0c;文字标签可能会发生重叠&#xff0c;导致用户无法清晰地查看地图信息。 幸运的是&#xff0c;OpenL…

IXTUR气控永磁铁:以高精度气控和稳定磁场,为机器人应用提供稳定抓取力

在现代工业生产和物流领域&#xff0c;物料的抓取与搬运是影响生产效率和成本控制的重要环节。传统夹爪在面对不同材质、形状和重量的物体时&#xff0c;常常存在适应性差、抓取不稳定、操作复杂等问题&#xff0c;导致生产流程中频繁出现停机调整&#xff0c;增加了人工干预成…

江科大51单片机笔记【16】AD/DA转换(下)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…

【C++】 —— 笔试刷题day_4

刷题day_4 继续加油&#xff01;&#xff01;&#xff01; 一、Fibonacci数列 题目链接&#xff1a;Fibonacci数列 题目解析 题目要求&#xff0c;输入一个数N&#xff0c;我们可以对N进行1/-1操作&#xff1b;题目让我们输出对N进行至少多少步可以变成Fibonacci数。 这里题目…

IP层之分片包的整合处理---BUG修复

在之前章节中&#xff0c;笔者就IP层之分片包的整合处理进行了概念介绍&#xff0c;以及代码编写和仿真&#xff0c;在整体代码调试环节&#xff0c;笔者发现了一个问题&#xff0c;在本文中&#xff0c;笔者将就这个BUG进行说明&#xff0c;以及进行修复&#xff0c;讲解代码实…

pyspark 数据处理的三种方式RDD、DataFrame、Spark SQL案例

目录 一、浅语二、三种数据处理方式比较2.1 RDD2.2 DataFrame2.3 Spark SQL 三、三种方法的创建方式3.1 创建RDD3.2 创建DataFrame3.2.1 创建sqlContext3.2.2 定义Schema3.2.3 创建DataFrame 3.3 创建SparkSQL3.3.1 登录临时表3.3.2 使用sparkSQL 四、三种方法显示部分字段4.1 …

文件解析漏洞靶机---- 练习通关攻略

1.安装靶机 点击 hackme.ova 文件&#xff0c;直接导入虚拟机&#xff0c;选择存储位置 2. 开启靶机 3. kali扫描同C段的ip&#xff0c;找到靶机ip nmap 192.168.182.1/24 经判断&#xff0c;靶机ip为&#xff1a;192.168.182.157 开启端口 http 80 、ssh 远程连接 22 4…

信号处理抽取多项滤波的数学推导与仿真

昨天的《信号处理之插值、抽取与多项滤波》&#xff0c;已经介绍了插值抽取的多项滤率&#xff0c;今天详细介绍多项滤波的数学推导&#xff0c;并附上实战仿真代码。 一、数学变换推导 1. 多相分解的核心思想 将FIR滤波器的系数 h ( n ) h(n) h(n)按相位分组&#xff0c;每…

【大模型基础_毛玉仁】2.3 基于 Encoder-only 架构的大语言模型

更多内容&#xff1a;XiaoJ的知识星球 目录 2.3 基于Encoder-only 架构的大语言模型2.3.1 Encoder-only 架构2.3.2 BERT 语言模型1&#xff09;BERT 模型结构2&#xff09;BERT 预训练方式3&#xff09;BERT 下游任务 2.3.3 BERT 衍生语言模型1&#xff09;RoBERTa 语言模型2&a…

20250310:OpenCV mat对象与base64互转

代码: https://github.com/ReneNyffenegger/cpp-base64 指南:https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp/ 实操:

概率论的基本知识

逆概率还不懂&#xff0c;改天再想想。 联合概率 联合概率&#xff08;Joint Probability&#xff09; 是概率论中的一个重要概念&#xff0c;用于描述多个随机变量同时取某些值的概率。联合概率可以帮助我们理解多个变量之间的关系。

pytest数据库测试文章推荐

参考链接&#xff1a; 第一部分&#xff1a;http://alextechrants.blogspot.fi/2013/08/unit-testing-sqlalchemy-apps.html第二部分&#xff1a;http://alextechrants.blogspot.fi/2014/01/unit-testing-sqlalchemy-apps-part-2.html

如何自己做奶茶,从此告别奶茶店

自制大白兔奶茶&#xff0c;奶香与茶香激情碰撞&#xff0c;每一口都是香浓与甜蜜的双重诱惑&#xff0c;好喝到跺脚&#xff01;丝滑口感在舌尖舞动&#xff0c;仿佛味蕾在开派对。 简单几步就能复刻&#xff0c;成本超低&#xff0c;轻松在家享受奶茶自由。 材料:大白兔奶糖&…

文件和异常

从文件中读取数据 读取整个文件 读取整个文件 要读取文件&#xff0c;需要一个包含几行文本的文件。下面首先创建一个文件&#xff0c;它包含精确 到小数点后30位的圆周率值&#xff0c;且在小数点后每10位处换行&#xff1a; pi_digits.txt 3.14159265358979323846264338…

2025最新版Windows通过GoLand远程连接Linux构建Go项目保姆级教学

以Ubuntu24.04和GoLand2024.1.6为例子&#xff0c;演示如何在Windows上通过GoLand远程连接Linux进行Go编程。 通过go version指令可以发现当前Ubuntu系统没有安装go。 go version 通过指令安装go&#xff0c;其他系统可以通过wget安装&#xff0c;要指定安装的具体go版本&…

Linux笔记---文件系统硬件部分

1. 文件系统 文件系统是操作系统用于明确存储设备&#xff08;常见的是磁盘&#xff0c;也有基于NAND Flash的固态硬盘&#xff09;或分区上的文件的方法和数据结构&#xff0c;即在存储设备上组织文件的方法。 1.1 基本组成 索引节点&#xff08;inode&#xff09;&#xff…

网络安全防护架构有哪些 网络安全防护措施包括

网络安全预防措施 网安措施 计算机网络安全措施主要包括保护网络安全、保护应用服务安全和保护系统安全三个方面&#xff0c;各个方面都要结合考虑安全防护的物理安全、防火墙、信息安全、Web安全、媒体安全等等。 (一)保护网络安全。 网络安全是为保护商务各方网络端系统之…