我最近编辑了一个扩展程序的css和HTML文件,为自己提供了更好的体验.
但是,当我启用扩展时,扩展名下方的一行说"此扩展程序可能已被恶意软件损坏.",并且不允许我启用扩展程序本身.
如何启用此扩展程序?
谢谢
更新:
Google的帮助页面:https://support.google.com/chrome/answer/187443?hl = zh-CN.
它说要访问扩展页面并通过扩展名单击"修复",但我没有出现这样的选项.
从实验看,集合表达式只被评估一次.考虑这个例子:
static NSArray *a;
- (NSArray *)fcn
{
if (a == nil)
a = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSLog(@"called");
return a;
}
...
for (NSString *s in [self fcn])
NSLog(@"%@", s);
Run Code Online (Sandbox Code Playgroud)
输出是:
2010-10-07 07:37:31.419 WidePhotoViewer Lite[23694:207] called
2010-10-07 07:37:31.420 WidePhotoViewer Lite[23694:207] one
2010-10-07 07:37:31.425 WidePhotoViewer Lite[23694:207] two
2010-10-07 07:37:31.425 WidePhotoViewer Lite[23694:207] three
Run Code Online (Sandbox Code Playgroud)
表示[self fcn]只被调用一次.
任何人都可以确认这是指定的(而不仅仅是观察到的)行为吗?
我的想法是做这样的事情:
for (UIView *v in [innerView subviews]) {
Run Code Online (Sandbox Code Playgroud)
而不是这个:
NSArray *vs = [innerView subviews];
for (UIView *v in vs) {
Run Code Online (Sandbox Code Playgroud)
思考?
这是一个简单的测试,我试图快速了解使用MySQL PDO预处理语句与使用直接查询所支付的性能损失.人员表中有2801行.MySQL版本5.5.28和PHP版本5.3.15.香草装置,无论默认参数如何.测试在8GB的iMac上运行.
$pdo = new PDO('mysql:host=localhost;dbname=cwadb_local', 'root', "");
$start = microtime(true);
for ($i = 0; $i < 200; $i++) {
$pdo->query("select * from person where name_last = 'smith' or true");
}
echo "<p>query: " . (microtime(true) - $start);
$start = microtime(true);
for ($i = 0; $i < 200; $i++) {
$stmt = $pdo->prepare("select * from person where name_last = :last or true");
$stmt->execute(array('last' => 'smith'));
}
echo "<p>prepare/execute: " . (microtime(true) - $start);
Run Code Online (Sandbox Code Playgroud)
这是输出:
query: 21.010436058044
prepare/execute: 20.74036192894
Run Code Online (Sandbox Code Playgroud)
这显示没有任何惩罚.可能性:
缓存准备好的语句确实有效.(注意我将prepare函数保留在循环中.) …
我在这里和其他地方读过很多关于使用cookie来"记住我"的选项,但我正在寻找的是一种设计cookie以记录双因素身份验证成功的方法.例如,Google就是这样做的:如果第二步成功(例如,您输入了通过SMS收到的代码),那么它会在一段时间(例如30天)内设置好cookie,这意味着第二步可以绕过.将此称为"验证Cookie".我的理解是,如果在那个时候你注销然后再次注册,它将不会执行第二步,而只会执行第一步.(我测试了这个,似乎就是这种情况.)
我的问题是如何设计这个cookie.一种想法是将用户ID和128位随机数放入cookie中,然后将该数字与用户ID一起存储在数据库中.这就是Charles Miller建议的(http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/)持久登录cookie.
但是,我觉得这还不够好.问题在于,由于用户使用双因素授权,无论使用哪种cookie来记录第二步成功,都应该比单因素授权的情况更安全.
我想要避免的是:破解者从数据库中获得了哈希/盐渍密码,并以某种方式获得了密码.如果他/她有这么多,我认为验证cookie中的128位随机数也是可用的.(如果破解者以其他方式获得了密码,并且没有数据库,那么验证cookie是安全的,除非他/她具有对计算机的物理访问权限.我只担心受损的数据库案例.)
也许一个想法是加密128位随机数?(需要是双向的 - 不是散列.)应用程序可以访问加密密钥,但是可以存储数据库凭据.
有没有人实现我所谓的验证cookie(不是持久登录cookie),并告诉我(我们)它是如何完成的?
更新:考虑到这一点,我认为足够安全的是:Cookie由userID和128位随机数组成 - 称之为R.
数据库包含密码和R,每个都经过哈希和盐化(例如,使用PhPass).然后,R被认为是第二个密码.好处:即使第一个密码不好(例如"password1"),R也是一个非常好的密码.数据库确实无法破解,所以不应该担心.(我想,我不必担心它.)
当我执行此语句时:
ALTER TABLE person MODIFY COLUMN subcommittee
ENUM('Arts','Bus','HC','IA','Pol','ST','Floater','Student') NULL DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)
反应是
2801 row(s) affected Records: 2801 Duplicates: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
但后来这句话:
update person set subcommittee = 'Student' where person_pk = 1381;
Run Code Online (Sandbox Code Playgroud)
总是会导致此错误消息:
Error Code: 1265. Data truncated for column 'subcommittee' at row 1
Run Code Online (Sandbox Code Playgroud)
(人员1381在数据库中,如果您想知道,或者我甚至不会收到此错误消息.)
选择另一个枚举工作:
update person set subcommittee = 'Floater' where person_pk = 1381;
1 row(s) affected Rows matched: 1 Changed: 1 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
当我从使用PDO的PHP应用程序中收到错误时,我首先注意到这一点,但随后在MySQLWorkbench中重现了它,从中获取了上述内容.
也许完全删除列并重新定义它可以解决问题,但这是一个实时数据库,我只想在其中添加一个额外的枚举值(Student).
我已经尝试重新输入alter语句,将其复制到文本编辑器以检查字符,以及一些其他的东西来排除值中奇怪的不可见字符.我还重新安排了价值观:
ALTER TABLE person MODIFY COLUMN subcommittee
ENUM('Arts','Bus','HC','IA','Pol','ST', 'Student','Floater') NULL DEFAULT NULL; …
Run Code Online (Sandbox Code Playgroud) 使用 MySQL 的 PHP PDO 接口,假设我有以下代码来结束事务(假设它已正确开始):
$pdo->query('commit');
Run Code Online (Sandbox Code Playgroud)
当函数返回时,对日志的写入是否已刷新?也就是说,事务是否已提交,或者我只是提出了提交请求?假设我没有设置任何延迟刷新的选项,例如将 innodb_flush_log_at_trx_commit 设置为零。
我问是因为,如果我要遵循上面的代码:
echo 'Transaction has been committed.';
Run Code Online (Sandbox Code Playgroud)
我不想被揭穿谎言。
更新:请参阅下面的评论。我不是在问 InnoDB 是如何工作的。我问PDO接口是否等待InnoDB引擎执行命令后再返回。
更新#2:我应该说提交将通过调用 PDO::commit 来执行,这就是我实际执行的方式,以防万一这与使用 SQL 执行之间有任何差异。
我想在Mobile Safari(iPhone,iPod,iPad)中显示非常宽的全景图像.这些在OS X Safari和其他浏览器中工作正常,但在Mobile Safari上,最大图像宽度似乎有限制.
考虑这个网页:
http://basepath.com/public/test1.html
有这个来源:
<!DOCTYPE HTML>
<html>
<head>
<meta name = 'viewport' content = 'width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0'>
<title>Test Image 1</title>
</head>
<body>
<p>
2415 x 750 (about 3.2:1)
<p>
<img src='http://farm5.static.flickr.com/4129/4987348894_76194e79d6_o.jpg' />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它完全符合我在Mobile Safari上的要求.你可以平移照片.纵横比约为3.2:1.
但是更大的图像,大约4:1,缩小了,如本页所示:
[ http://] basepath.com/public/test2.html
[我的低声誉阻止我提供上述链接.仅限于一个.]
除评论和图片外,来源相同:
<!DOCTYPE HTML>
<html>
<head>
<meta name = 'viewport' content = 'width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0'>
<title>Test Image 2</title>
</head>
<body>
<p>
3028 x 750 (about 4:1)
<p>
<img src='http://farm5.static.flickr.com/4113/4994072964_1a7f7f90fe_o.jpg' />
</body>
</html> …
Run Code Online (Sandbox Code Playgroud) 假设我的Web应用程序受到CSRF令牌的CSRF攻击保护,此外,它还使用SSL并受到XSS攻击防护.此外,出于此问题的目的,假设它仅用于最近的浏览器并且它们没有错误.我可以使用X-Frame-Options:Deny标头来防止基于帧的点击劫持,但是我没有看到它将提供什么额外的保护,因为任何基于帧的表单提交都缺少CSRF令牌.(并且同源策略阻止攻击者的JavaScript发现CSRF令牌.)问题:
还有其他一种不基于框架的点击劫持吗?(即,是一个X-Frame-Options:拒绝完全的点击劫持防御?)
在没有X-Frame-Options:Deny标头的情况下,根据上述假设,点击劫持攻击仍有可能成功吗?
(我问的不是因为我想阻止基于帧的点击劫持,因为我确实包含了X-Frame-Options:Deny头.相反,我试图理解点击劫持攻击的范围.)
我正在尝试应用以下流程:
background.js
按下时键中的键的绑定:从background.js -> contentScript.js
发送响应发送消息contentScript.js -> background.js
这是menifit.json
定义:
"background" : {
"scripts" : ["background.js"],
"persistent" : true
},
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["contentScript.js"]
}
],
Run Code Online (Sandbox Code Playgroud)
绑定部分工作正常.
这是以下代码background.js
:
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
console.log(response.farewell);
});
});
Run Code Online (Sandbox Code Playgroud)
这是以下代码contentScript.js
:
chrome.runtime.onMessage.addListener(HandleMessage);
function HandleMessage(request, sender, sendResponse)
{
if (request.greeting == "hello")
{
sendResponse({farewell: "goodbye"});
}
};
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Error in event handler for (unknown): Cannot read property 'farewell' of undefined
Stack trace: TypeError: Cannot read property …
Run Code Online (Sandbox Code Playgroud) 常见操作是在不存在的情况下插入新行,或更新现有行.不幸的是,插入和更新SQL语句的语法完全不同:Insert采用列列表,后跟相应的值列表,而update采用列=值对列表.MySQL"插入...重复键更新"语句(其upsert语句)不能解决此问题,因为它仍然需要完整的插入列/值列表,后跟完整的更新列/值列表.[更新:来自Wrikken的评论下面指出这两个语句可以共享column = value语法,但其他问题仍然存在.]
与此问题相关的是,如果您使用触发器来检查数据(就像我一样),您需要两个触发器(before-insert和before-update),并且,因为他们必须使用"new"限定符,所以必须编写两次检查代码,每次触发一次,或者将其放入一个程序中.如果使用过程,则必须将每个列作为单独的参数传递,因为该过程不能使用"new",如果您有很多列,这可能是很容易出错的类型.每列必须在create table语句中具有其类型,然后在检查过程的定义中第二次.一旦出现小错误,你就会创建一个微妙的,难以发现的错误.我不喜欢任何涉及两次编码同一事物的方法.(这相当于非标准化.)
考虑到这个插入/更新问题,我一直在考虑以下想法,我想要一些反馈,特别是如果有人真的尝试过它:
仅对占位符行使用insert,仅保留最少量的数据,以及获取或设置主键.然后,将所有用户输入的数据放入更新语句中.现在,您不需要"插入...重复密钥更新",因为普通更新会这样做.此外,您需要仅在更新前触发器上检查数据,因为没有任何内容可以检查插入.(条目表中的所有用户提供的数据都由更新处理,而不是由插入处理.)
当然,这种方法的主要缺点是新行有两个操作:insert后跟update,而不是insert.但是,这可能不是一个因素,因为:
插入物可能相对罕见.例如,在我几年前为理查森(德克萨斯州)学区做过的学生评分申请中,每年只增加了几千名学生,而有成千上万的学生,因为教师使用了整个学年的系统.
在我建立的其他几个系统中,性能无关紧要.例如,我正在处理的当前系统只有两三个人每周只更新数据库几个小时.负载是如此之小,以至于当只有一个操作时,由两个操作(插入+更新)引起的开销是不重要的.(它只适用于新行,请记住.)
那么,有没有人真正试过这个:插入只是为了创建一个极简主义的占位符行,并对所有用户提供的数据更新使用更新?
Chrome(至少我正在使用的测试版)现在已经在原生JavaScript中实现了承诺,并且基于一些实验,它的工作正常.有很多关于"then"和"catch"方法的文档,我可以将promises链接在一起,这样当一个完成时,下一个就会等待.
但是,我想知道如何并行地等待promises,当它们全部满足或拒绝时调用回调函数.在这种情况下,所有结果和原因也必须可用,也许在阵列中.
转储JavaScript对象("Promise"),我看到一个方法"all",但我无法找到它的文档.
任何人都可以提供此信息吗?
我还实现了自己的实验并行机制,如下所示:
function async1_promise() {
return new Promise(
function(resolve, reject) {
async_call1(
function () {
resolve("async_call1 worked!");
}
);
}
);
}
function async2_promise() {
return new Promise(
function(resolve, reject) {
async_call2(
function () {
resolve("async_call2 worked!");
}
);
}
);
}
function async3_promise() {
return new Promise(
function(resolve, reject) {
async_call3(
function () {
resolve("async_call3 worked!");
}
);
}
);
}
parallel([async1_promise(), async2_promise(), async3_promise()],
function (promises, results) {
console.log('all done', promises, results);
}
);
function parallel(promises, …
Run Code Online (Sandbox Code Playgroud) mysql ×4
iphone ×2
javascript ×2
pdo ×2
php ×2
asynchronous ×1
clickjacking ×1
commit ×1
cookies ×1
csrf ×1
css ×1
enums ×1
foreach ×1
insert ×1
jquery ×1
objective-c ×1
safari ×1
security ×1
sql-update ×1
upsert ×1
webkit ×1