如何在yii2 rsa框架中植入rsa机制

Xunsearch 整合到Yii2框架中 - 推酷
Xunsearch 整合到Yii2框架中
公司一直用的YII2框架,然后要做一个中文搜索引擎,所有想的Xunsearch这个项目,之前有文章提到了,怎么安装Xunsearch服务端。Xunsearch项目安装
xunsearch暂时只有Liunx的服务端和PHP-SDK。但作者确提供了一个YII2的扩展。突然感觉好幸福的说。
本来是通过使用PHP-SDK写一个简单的添加索引和更新索引还有删除索引的功能,但有考虑到
的情况。就是一个Xunsearch可以被多个项目公用,所有配置文件放置在每一个项目的配置文件里面,根据这个项目的配置文件来区分每一个搜索数据库。这是我一开始的想法,但重点是不是怎么想,而是怎么去做。实践才是硬道理,然后就遇到下面的这些问题。
这里目标链接,我接下来要说下安装心得
// application components
'components =& [
// ... other components ...
'xunsearch' =& [
'class' =& 'hightman\xunsearch\Connection', // 此行必须,这里不一定是这写的,可能是hightman.xunsearch.Connection 根据实际项目出发
'iniDirectory' =& '@app/config', // 搜索 ini 文件目录,默认:@vendor/hightman/xunsearch/app
'charset' =& 'utf-8',
// 指定项目使用的默认编码,默认即时 utf-8,可不指定
然后,如果你的PHP环境是集成的安装包,可能会遇到这么一个问题
Unexpected character in input: '\' (ASCII=92) state=1
网上有人说是 php.ini 里面的配置问题,说把,short_open_tag 改成 On,我第一看感觉很有道理,然后找到发现,本来就是On。
(全世界的技术都在用的一个技术论坛,官方语言是英语)上面去找,果然找到了。知道真相的我,真的是不想多了。
因为那个YII2的扩展用到了PHP5.3才有的命名空间特效。而我的本地PHP版本是5.2.6。我表示淡定不了。折磨一天的事情,居然是因为PHP版本太低。
就总结到这里,我现在只想静静。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致[PHP]Yii2框架的坑
(window.slotbydup=window.slotbydup || []).push({
id: '2611110',
container: s,
size: '240,200',
display: 'inlay-fix'
您当前位置: &
[ 所属分类
| 时间 2015 |
作者 红领巾 ]
Yii2框架的几个隐蔽的坑
摘要:Yii2是一款优秀的通用Web后端框架,结构简单优雅、实用功能丰富、扩展性强、性能搞是他最突出的优点。它优秀的地方你在使用过程中总能轻易的发现,无须赘述。而这些隐蔽的小瑕疵,显得更有必要告诉大家。
博客: /jhzhu
作者: 知明所以
Yii2框架的几个隐蔽的坑
ActiveRecord被莫名写入?
你的Transaction生效了吗?
'Y-m-d'不被识别?
距离上次写博客,已经有三个月了。在动手写之前,总是带着深深的罪恶感。被它折磨许久,终于,还是,动手了。
值得庆祝的一件事:最近开始,每天早上8:30起来健身了。有两个视频很好用,只需8分钟,照着做一遍保证你(生)爽(不)到(如)爆(死)。( 8分钟腹肌锻炼第2级-下载
, 8分钟胸肌锻炼第2级-下载
值得反思的一件事:最近看了《叔本华美学随笔》,改变了我一直以来对阅读的看法。我曾经以为阅读是进步的源动力,却被这本书深深的打脸了。来,先给大家分享一段:
我们只管所见的外在环境并不像阅读物那样,把某已确定的见解强加给我们的头脑,而只是为我们提供了素材和机会。去思考与我们的头脑能力相称、与当下的情绪相符的事情。所以,太多的阅读会是我们的精神失去弹性,就像把一重物持续压在一条弹簧上面就会是弹簧失去弹性一样;而让自己没有自己思想的最稳妥的办法就是在空闲的每一分钟马上随手拿起一本书。
思考才是进步的源动力!
好了,扯淡完毕,步入正题。
ActiveRecord被莫名写入?
ActiveRecord
的基本用法。如果不理解,可参考 这里
/** * @property integer $id * @property string $name * @property string $detail * @property double $price * @property integer $area **/class OcRoom extends ActivieRecord{ ...}$room = OcRoom::find() //先取出一个对象。 -&select(['id']) //只取出'id'列 -&where(['id'=&20]) -&one();$room-&save(); //保存,会发现此行的其它字段都被写成默认值了。
这个例子的问题在于:
我从数据库中取出了一行,也就是代码中的 $room
,但是只取出了 id
字段,而其他字段自然就是默认值。
当我 $room-&save()
的时候,那些是默认值的字段也被保存到数据库里去了。what!?
也就是说,当你想节约资源,不取出所有字段的时候, 一定要注意不能保存,否则,很多数据会被莫名修改为默认值。
然而,我们有什么解决办法呢?提供几种思路:
自己时刻注意,避免未完全取出的 ActiveRecord
修改或继承 ActiveRecord
, 使得,当此对象由 find()
新建,且字段没有完全取出,调用 save()
方法,抛出异常。
修改或继承 ActiveRecord
,使得,当此对象由 find()
新建,且字段没有完全取出,调用 save()
方法时,只保存取出过的字段,其他字段被忽略。
你的Transaction生效了吗?
/** * @property integer $id * @property string $name **/class OcRoom extends ActiveRecord{ public function rules() { return [['name','string','min'=&2,'max'=&10]]; } ...}class OcHouse extends ActiveRecord{ public function rules() { return [['name','string','max'=&10]]; } ...}$a = new OcRoom();$a-&name = ''; //name为空字符串,不满足rules()条件。$b = new OcHouse();$b-&name = '我的房间'; //name合法,可以保存。$transaction = Yii::$app-&db-&beginTransaction();try{ $a-&save(); //name字段不合法,无法验证通过,在validate()阶段已经返回false,不会进行数据库存储的步骤,所以也不会抛出异常。 $b-&save(); //name字段合法,可以正常保存。 $transaction-&commit(); //提交后,发现$a保存失败,而$b保存成功。}catch (Exception $e) { Yii::error($e-&getTraceAsString(),__METHOD__); $transaction-&rollBack();}
这段代码的问题在于:
大家知道 $transaction
的存在意义是保证整段数据库存储代码要么全成功,要么全失败。
显然,在这个例子中, transaction
并没有达到我们想要的效果: $a
因为 validate()
都没过,所以 $transation-&commit()
的时候并不会报错。
在 $transation
块内,所有的 save()
都要判断下返回值,如果为 false
,则直接抛出异常。
'Y-m-d'不被识别?
OcRenterBill extends ActiveRecord{ public function rules() { return [['start_time','date','format'=&'Y-m-d'], ]; }}$a = new OcRenterBill();$a = '';$a-&save(); //会报错,说格式不对。
如果一开始,Yii框架就报错,这个还不算坑。坑的是我在Mac上开发时,这个可以完全正常的工作,而发布到线上环境(Ubuntu)后,就弹出“属性start_time格式无效”的错误。而参考官方文档,发现这种格式是允许的 官方文档
啊啊啊。各种试错,最后发现如果改成 :Y-m-d
,世界就清净了。所以,如果你遇到这种问题,感激我吧。
本文开发(php)相关术语:php代码审计工具 php开发工程师 移动开发者大会 移动互联网开发 web开发工程师 软件开发流程 软件开发工程师
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
CodeSecTeam微信公众号
意识到自由意志是上天赐予的礼物的人,只有在奋力抗争之后,才知道如何善用!
手机客户端
,专注代码审计及安全周边编程,转载请注明出处:http://www.codesec.net
转载文章如有侵权,请邮件 admin[at]codesec.net时间: September 10, 2014
在Yii框架中,为了防止csrf攻击,封装了CSRF令牌验证。
只需要在主配置文件中进行简单的配置,就可以实现CSRF的验证。
'components'=&array(
'request'=&array(
// Enable Yii Validate CSRF Token
'enableCsrfValidation' =& true,
将enableCsrfValidation设置为true了之后,使用Yii表单生成页面的时候,如果表单的提交方式为POST,是都会在页面中添加一个隐藏字段
&div style="display:none"&
&input type="hidden" value="a429b6c0f1dfe2672c7" name="YII_CSRF_TOKEN" /&
自己写的表单需要手动添加隐藏字段
&input type="hidden" value="&?php echo Yii::app()-&getRequest()-&getCsrfToken(); ?&" name="YII_CSRF_TOKEN" /&
用户在提交表单的同时,将该字段提交给服务器端,Yii框架会将该有客户端提交过来的隐藏字段和客户端提交过来的Cookie中的YII_CSRF_TOKEN值进行比较。相同则通过继续执行,不相同则会抛出400异常:"The CSRF token could not be verified."。
上面的方法是将客户端提交过来的值和客户端的Cookie中的值进行比较,并不是最为安全的方法。
目前更为安全的方式,是将客户端提交过来的值和Session中的值进行比较,这就需要重写CHttpRequest类了。具体步骤如下:
重写CHttpRequest:
创建一个类HttpRequest继承于CHttpRequest,并将该类存放在 protected/components 下。
重写CHttpRequest的 getCsrfToken() 和 validateCsrfToken($event) 方法。
private $_csrfT
public function getCsrfToken()
if($this-&_csrfToken===null)
$session = Yii::app()-&
$csrfToken=$session-&itemAt($this-&csrfTokenName);
if($csrfToken===null)
$csrfToken = sha1(uniqid(mt_rand(),true));
$session-&add($this-&csrfTokenName, $csrfToken);
$this-&_csrfToken = $csrfT
return $this-&_csrfT
public function validateCsrfToken($event)
if($this-&getIsPostRequest())
// only validate POST requests
$session=Yii::app()-&
if($session-&contains($this-&csrfTokenName) && isset($_POST[$this-&csrfTokenName]))
$tokenFromSession=$session-&itemAt($this-&csrfTokenName);
$tokenFromPost=$_POST[$this-&csrfTokenName];
$valid=$tokenFromSession===$tokenFromP
if(!$valid)
throw new CHttpException(400,Yii::t('yii','The CSRF token could not be verified.'));
修改配置文件main.php:
'components' =& array(
'request' =& array(
'class' =& 'ponents.HttpRequest',
'enableCsrfValidation' =& true,
添加新评论
: [...]来源:/ar...
: WordPress
: "将客户端提交过来的值和Session中的值进行比较"
想提高安...Yii2 的注册登陆实现 - 教程 - Yii Framework 中文社区
Yii2 的注册登陆实现
20007次浏览
首先看SiteController.php
以下是必须引入的
use frontend\models\SiteLoginF
use frontend\models\U
use frontend\models\SignupF
public function actionSignup()
$model = new SignupForm();
if ($model-&load(Yii::$app-&request-&post())) {
if ($user = $model-&signup()) {
// $login = new SiteLoginForm();
if(Yii::$app-&getUser()-&login($user)) {
return $this-&goHome();
var_dump($user);
return $this-&render('signup', [
'model' =& $model,
public function actionLogin()
if (!\Yii::$app-&user-&isGuest) {
return $this-&goHome();
$model = new SiteLoginForm();
if ($model-&load(Yii::$app-&request-&post()) && $model-&login()) {
return $this-&goBack();
return $this-&render('login', [
'model' =& $model,
frontend/models/User.php文件
namespace frontend\
use yii\web\IdentityI
class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface
* @inheritdoc
public static function tableName()
return 'shop_user';
* @inheritdoc
public function rules()
[['username', 'pwd', 'create_time'], 'required'],
[['create_time'], 'integer'],
[['username'], 'string', 'max' =& 20],
[['pwd'], 'string', 'max' =& 32]
* @inheritdoc
public function attributeLabels()
'id' =& 'ID',
'username' =& 'Username',
'pwd' =& 'Pwd',
'create_time' =& 'Create Time',
* Generates password hash from password and sets it to the model
* @param string $password
public function setPassword($password)
$this-&pwd = md5($password);
* @inheritdoc
public static function findIdentity($id)
return static::findOne($id);
//return isset(self::$users[$id]) ? new static(self::$users[$id]) :
* @inheritdoc
public static function findIdentityByAccessToken($token, $type = null)
return static::findOne(['access_token' =& $token]);
/*foreach (self::$users as $user) {
if ($user['accessToken'] === $token) {
return new static($user);
* Finds user by username
* @return static|null
public static function findByUsername($username)
$user = User::find()
-&where(['username' =& $username])
-&asArray()
if($user){
return new static($user);
/*foreach (self::$users as $user) {
if (strcasecmp($user['username'], $username) === 0) {
return new static($user);
* @inheritdoc
public function getId()
return $this-&
* @inheritdoc
public function getAuthKey()
return $this-&authK
* @inheritdoc
public function validateAuthKey($authKey)
return $this-&authKey === $authK
* Validates password
$password password to validate
* @return boolean if password provided is valid for current user
public function validatePassword($password)
return $this-&pwd === md5($password);
config/main.php代码
'components' =& [
'user' =& [
'identityClass' =& 'frontend\models\User',
'enableAutoLogin' =& true,
SignupForm.php代码
//注意这里的规则由你自己定义有几个地段哈
public function rules()
['username', 'filter', 'filter' =& 'trim'],
['username', 'required','message' =& '用户名不能为空'],
['username', 'unique', 'targetClass' =& '\frontend\models\User', 'message' =& '用户名已存在'],
['username', 'string', 'min' =& 2, 'max' =& 255],
['password', 'required','message' =& '密码不能为空'],
['password', 'string', 'min' =& 6],
//注意这个方法里user表的字段
public function signup()
if ($this-&validate()) {
$user = new User();
$user-&username = $this-&
$user-&setPassword($this-&password);
$user-&create_time = time();
if ($user-&save()) {
,准备借助yiichina里的教程,编辑成一本书,最后用某高校LaTeX论文模板美化一下,每月或者更长时间发布PDF教程总结,求支持。
我想把你的教程录入到这本书里,并记录您的名字及原网址,可否?谢谢啦。
共 3 条回复
厉害、当然可以、技术这东西
就是要分享
就是要分享
请问 gohome
和 那个 goback
有什么用的·
共 2 条回复
gohome 回主页
返回上一页
这个主页是哪里?可以自定义吗?
请问这个是基础模板的登陆,还是高级模板的登陆?
共 1 条回复
高级模版里的
SiteLoginForm类代码没有,跪求
SiteLoginForm类代码没有,跪求
您需要登录后才可以评论。 |1、自定义help工具类。如下图
2、在控制层DemoController里调用。代码如下
3、[测试]。在浏览器中输入:http://localhost/echo/web/index.php?r=demo/echo1 & &。结果如下图:提示 无法识别的help应用
4、[原因]。虽然代码已经拷贝到项目中,但没有在YII中声明help这个组件,所以不能直接使用
5、[解决]。在配置文件中声明。
5.1、查看配置文件。看web目录下的index.php(所有请求都会先经过这个文件),从这段代码&
$config = require(__DIR__ . '/../config/web.php'); 可以看出,配置内容在config目录下的web.php里
5.2、声明help为组件。如下图所示
9、[再测试] 可以看到下图结果,表示 help这个类 可直接使用
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:82922次
积分:1929
积分:1929
排名:第16343名
原创:115篇
转载:19篇
(3)(1)(7)(10)(9)(1)(1)(1)(1)(1)(2)(3)(4)(1)(4)(8)(3)(6)(12)(14)(1)(10)(5)(4)(2)(1)(6)(8)(2)}

我要回帖

更多关于 yii2 rsa加密 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信