小编Mar*_*ind的帖子

已编辑的Chrome扩展程序 - chrome认为它是恶意软件

我最近编辑了一个扩展程序的css和HTML文件,为自己提供了更好的体验.

但是,当我启用扩展时,扩展名下方的一行说"此扩展程序可能已被恶意软件损坏.",并且不允许我启用扩展程序本身.

如何启用此扩展程序?

谢谢

更新:

Google的帮助页面:https://support.google.com/chrome/answer/187443?hl = zh-CN.

它说要访问扩展页面并通过扩展名单击"修复",但我没有出现这样的选项.

css google-chrome google-chrome-extension

14
推荐指数
1
解决办法
9023
查看次数

目标c"为每个"(快速枚举) - 收集评估?

从实验看,集合表达式只被评估一次.考虑这个例子:

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)

思考?

iphone foreach objective-c fast-enumeration

11
推荐指数
2
解决办法
2万
查看次数

MySQL PDO准备比查询更快?这就是这个简单的测试所显示的

这是一个简单的测试,我试图快速了解使用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函数保留在循环中.) …

php mysql pdo prepared-statement

7
推荐指数
2
解决办法
3925
查看次数

需要cookie来记住双因素身份验证成功(不是持久登录)

我在这里和其他地方读过很多关于使用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也是一个非常好的密码.数据库确实无法破解,所以不应该担心.(我想,我不必担心它.)

security cookies two-factor-authentication

7
推荐指数
1
解决办法
6300
查看次数

修改枚举列成功,但值无效

当我执行此语句时:

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 enums

5
推荐指数
1
解决办法
5258
查看次数

从 PHP PDO 执行时 MySQL 提交是否同步?

使用 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 执行之间有任何差异。

php mysql pdo commit

5
推荐指数
0
解决办法
688
查看次数

Mobile Safari中的最大图像宽度?在panos上进行不必要的降尺度调整

我想在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)

iphone safari webkit mobile-safari

4
推荐指数
1
解决办法
1万
查看次数

CSRF防御还能抵御点击劫持吗?

假设我的Web应用程序受到CSRF令牌的CSRF攻击保护,此外,它还使用SSL并受到XSS攻击防护.此外,出于此问题的目的,假设它仅用于最近的浏览器并且它们没有错误.我可以使用X-Frame-Options:Deny标头来防止基于帧的点击劫持,但是我没有看到它将提供什么额外的保护,因为任何基于帧的表单提交都缺少CSRF令牌.(并且同源策略阻止攻击者的JavaScript发现CSRF令牌.)问题:

  1. 还有其他一种不基于框架的点击劫持吗?(即,是一个X-Frame-Options:拒绝完全的点击劫持防御?)

  2. 在没有X-Frame-Options:Deny标头的情况下,根据上述假设,点击劫持攻击仍有可能成功吗?

(我问的不是因为我想阻止基于帧的点击劫持,因为我确实包含了X-Frame-Options:Deny头.相反,我试图理解点击劫持攻击的范围.)

csrf x-frame-options clickjacking

4
推荐指数
1
解决办法
1812
查看次数

在'background.js'到'contentScript.js'之间传递简单信息

我正在尝试应用以下流程:

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)

javascript jquery google-chrome google-chrome-extension

4
推荐指数
1
解决办法
4709
查看次数

简化了MySQL中的更新/插入(upsert)处理

常见操作是在不存在的情况下插入新行,或更新现有行.不幸的是,插入和更新SQL语句的语法完全不同:Insert采用列列表,后跟相应的值列表,而update采用列=值对列表.MySQL"插入...重复键更新"语句(其upsert语句)不能解决此问题,因为它仍然需要完整的插入列/值列表,后跟完整的更新列/值列表.[更新:来自Wrikken的评论下面指出这两个语句可以共享column = value语法,但其他问题仍然存在.]

与此问题相关的是,如果您使用触发器来检查数据(就像我一样),您需要两个触发器(before-insert和before-update),并且,因为他们必须使用"new"限定符,所以必须编写两次检查代码,每次触发一次,或者将其放入一个程序中.如果使用过程,则必须将每个列作为单独的参数传递,因为该过程不能使用"new",如果您有很多列,这可能是很容易出错的类型.每列必须在create table语句中具有其类型,然后在检查过程的定义中第二次.一旦出现小错误,你就会创建一个微妙的,难以发现的错误.我不喜欢任何涉及两次编码同一事物的方法.(这相当于非标准化.)

考虑到这个插入/更新问题,我一直在考虑以下想法,我想要一些反馈,特别是如果有人真的尝试过它:

仅对占位符行使用insert,仅保留最少量的数据,以及获取或设置主键.然后,将所有用户输入的数据放入更新语句中.现在,您不需要"插入...重复密钥更新",因为普通更新会这样做.此外,您需要仅在更新前触发器上检查数据,因为没有任何内容可以检查插入.(条目表中的所有用户提供的数据都由更新处理,而不是由插入处理.)

当然,这种方法的主要缺点是新行有两个操作:insert后跟update,而不是insert.但是,这可能不是一个因素,因为:

  1. 插入物可能相对罕见.例如,在我几年前为理查森(德克萨斯州)学区做过的学生评分申请中,每年只增加了几千名学生,而有成千上万的学生,因为教师使用了整个学年的系统.

  2. 在我建立的其他几个系统中,性能无关紧要.例如,我正在处理的当前系统只有两三个人每周只更新数据库几个小时.负载是如此之小,以至于当只有一个操作时,由两个操作(插入+更新)引起的开销是不重要的.(它只适用于新行,请记住.)

那么,有没有人真正试过这个:插入只是为了创建一个极简主义的占位符行,并对所有用户提供的数据更新使用更新?

mysql insert upsert sql-update

3
推荐指数
1
解决办法
4010
查看次数

使用Chrome中的本机实现处理并行承诺

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)

javascript asynchronous google-chrome

2
推荐指数
1
解决办法
2111
查看次数