Arxan攜手叡揚 協助企業保護App安全

首家支援Kotlin保護 Threat Analytics功能

因應金融業數位轉型趨勢,叡揚資訊於日前舉辦「資安風險與金融科技大未來」高峰會。會中邀請BSI英國標準協會台灣分公司蒲樹盛總經理、API Management 專家Axway、App行動裝置防護領導品牌Arxan等經理人到場分享全球科技風險與資安趨勢、臺灣最新金融法規說明及因應策略。其中,Arxan在會中介紹支援Kotlin的Arxan for Android,內建全新Threat Analytics功能,主動掌握App安全健康狀況,吸引在場眾多金融及政府單位管理高層的關注。

「資安風險與金融科技大未來」高峰會吸引金融及政府單位資訊經理人前來共襄盛舉

繼續閱讀 “Arxan攜手叡揚 協助企業保護App安全”

apple In-House certificate 要過期了怎麼辦?

問題

我們公司 Apple Enterprise Store 中的 In-House certificate 快過期了,而所有依據它所建罝出來的 Provisioning Profiles 也跟著快過期了,要怎麼辦呢? Revoke 嗎?

解法

如下圖,我們公司的 In-House certificate 有效只到 2018/8/2 ,到時我們相對應的 iOS App 不就 GG 了。 我們就只能等著它過期嗎 ? 過期後,會自動 renew 嗎?
[快過期的In-House certificate]

繼續閱讀 “apple In-House certificate 要過期了怎麼辦?”

不要成為下一個EQUIFAX – 2017 十大OpenSource弱點

已經過去了一年。你的產品中是否還有這些漏洞?

 

在2017年,Open Source的漏洞對於應用程式的安全性來說,是最具威脅性的一年。尤其是在Equifax慘痛的教訓之後。Equifax事件,就像電影一樣,居然在Equifax團隊的眼皮底下,洩漏了超過1.45億筆個人資料,讓我們想回顧一下,過去這一年還有那些漏洞,來攻擊整個資訊產業?造成可憐的工程師非常頭痛,並用多個漫長的夜晚來進行軟體更新及漏洞修補。 繼續閱讀 “不要成為下一個EQUIFAX – 2017 十大OpenSource弱點”

全球著名開源軟體管理領導品牌WhiteSource發佈最新技術 – Contextual Pattern Matching Engine, 可支援超過200種程式語言

開源軟體安全及授權合規性管理領導廠商WhiteSource於 2018/4/26在以色列特拉維夫發表正進行專利審理的全新匹配引擎Contextual Pattern Matching (CPM)Engine,此技術大幅強化了程式碼與函式庫配對及檢測的準確性。新一代的CPM Engine與前一代相比,更快、精準的比對程式碼與開源函式庫。 繼續閱讀 “全球著名開源軟體管理領導品牌WhiteSource發佈最新技術 – Contextual Pattern Matching Engine, 可支援超過200種程式語言”

IBotDataStore.FlushAsync Exception: The data is changed

前言

最新有個需求就是要判斷目前 User 是不是在進行某項作業, 如果不是就推送包含 Button 的訊息給 User, 不然就推文字通知訊息等目前的作業完成後,再顯示待辦的 Button 訊息給 User .

研究

最簡單的就是將這個 flag 寫在 BotState 之中,所以我們可以在使用者加入時,將它的 Conversation 記錄下來,如下,

if (message.Type == ActivityTypes.ConversationUpdate)
{
Func<ChannelAccount, bool> isChatbot =
channelAcct => channelAcct.Id == message.Recipient.Id;
if (message.MembersAdded.Any(isChatbot))
{
var memberAdded = message.MembersAdded.FirstOrDefault();
//這裡請自行處理將該 user 的 Conversation 儲存起來,為了方便,這裡將它存在一個變數之中
WebApiApplication._ConversationReference = message.ToConversationReference();
}
}

然後在申請作業記錄這個 Flag ,當然,結束時請記得將這個 Flag 清除哦!

using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, context.Activity.AsMessageActivity()))
{
var botDataStore = scope.Resolve<IBotDataStore<BotData>>();
var key = Address.FromActivity(context.Activity);
var botUserData = await botDataStore.LoadAsync(key, BotStoreType.BotUserData, default(CancellationToken));
botUserData.SetProperty<string>(“dialog”, “RootDialog:MessageReceivedAsync”);
await botDataStore.SaveAsync(key, BotStoreType.BotUserData, botUserData, default(CancellationToken));
await botDataStore.FlushAsync(key, default(CancellationToken));
}

可是執行時,卻發生了「Exception: The data is changed」的錯誤,如下圖,
[Exception: The data is changed]

因為 botframework 會自動去幫我們將 State 存檔,所以當它存檔時,發現狀態被改掉了,所以就出現「Exception: The data is changed」的錯誤 .

嗯, 那怎麼辦呢? 那就調整程式, 不要去呼叫 FlushAsync, 讓 botframework 去存就可以了, 所以程式調整如下,

using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, context.Activity.AsMessageActivity()))
{
var botDataStore = scope.Resolve<IBotDataStore<BotData>>();
var key = Address.FromActivity(context.Activity);
var botUserData = await botDataStore.LoadAsync(key, BotStoreType.BotUserData, default(CancellationToken));
botUserData.SetProperty<string>(“dialog”, “RootDialog:MessageReceivedAsync”);
await botDataStore.SaveAsync(key, BotStoreType.BotUserData, botUserData, default(CancellationToken));
//await botDataStore.FlushAsync(key, default(CancellationToken));
}

所以我們的通知程式就可以透過 ConversationReference 轉回 Activity, 取回 BotState, 例如,我新增一個 api method 來顯示 BotState , 如下,

[Route(“api/Messages/GetDialogData”)]
[HttpGet]
public async Task<HttpResponseMessage> GetDialogData()
{
var resp = new HttpResponseMessage(HttpStatusCode.OK);
if (WebApiApplication._ConversationReference != null)
{
var message = WebApiApplication._ConversationReference.GetPostToBotMessage();
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message.AsMessageActivity()))
{
var botDataStore = scope.Resolve<IBotDataStore<BotData>>();
var key = Address.FromActivity(message);
var botUserData = await botDataStore.LoadAsync(key, BotStoreType.BotUserData, default(CancellationToken));
var dialogData = botUserData.GetProperty<string>(“dialog”);
resp.Content = new StringContent($”<html><body>Dialogs:{dialogData}</body></html>”, System.Text.Encoding.UTF8, @”text/html”);
}
}
return resp;
}

所以在 Dialog 中儲存 State 時 , 可以注意一下這種狀況哦 ^_^

Demo 專案可以參考 rainmakerho/Exception_DataChanged

參考資料

Microsoft Bot Framework: Exception: The data is changed