我有一个简单的网站,我使用PDO建立与Mysql服务器的连接.
$dbh = new PDO('mysql:host=localhost;dbname=DB;port=3306', 'USER',
'SECRET',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
Run Code Online (Sandbox Code Playgroud)
我的网站上有一些流量,达到服务器连接限制,网站抛出此错误,其中包含我的PLAIN密码!
致命错误:/home/domain/html/index.php:xxx中带有消息"SQLSTATE [08004] [1040]连接太多"的未捕获异常"PDOException"堆栈跟踪:#0 /home/domain/html/index.php (64):PDO - > __ construct('mysql:host = loca ...','USER','SECRET',Array)在第64行的/home/domain/html/index.php中抛出#1 {main}
具有讽刺意味的是,出于安全考虑我转向PDO,所以这让我感到震惊,因为这个确切的错误是你可以在大多数使用简单的http泛滥的网站上轻易引起的.
我现在已将我的连接包装在try/catch块中,但我认为这仍然是灾难性的!
我是PDO的新手,所以我的问题是:我需要做些什么来考虑安全?如何以安全的方式建立连接?是否还有其他已知的安全漏洞,我必须注意这个漏洞?
我在我的网站上有这个代码
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"/>
<script type='text/javascript' src='/lib/player/swfobject.js'></script>
Run Code Online (Sandbox Code Playgroud)
swfobject没有工作(没有加载).
将代码更改为:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script type='text/javascript' src='/lib/player/swfobject.js'></script>
Run Code Online (Sandbox Code Playgroud)
它工作正常.
该文档被解析为HTML5.
我觉得这很有趣.好的,授予一个已关闭的标签和一个自动关闭的标签不一样.所以我会理解jQuery是否无法加载(虽然我觉得它很荒谬).
但我不明白的是,jQuery加载,但以下,正确编写的标签,不?
我远程记住,尝试不存储每个节点的整个数据,只存储父节点的后缀.
树存储整个数据,但只根据前缀组织自己.
因此尝试变得更小,这允许例如非常好地压缩字典.
这真的是唯一的区别吗?
从实际应用程序中我记得尝试在范围查询中更快.甚至还有特殊的solr/lucene trie字段来加速范围查询.但那是怎么回事?
尝试和树木的实际差异是什么,优点和缺点是什么?
我已经对这个主题做了很多研究,并且自己实施了很多解决方案.
包括OpenID,Facebook Connect(使用旧的Rest API和新的Graph OAuth 2.0 API),使用twitter登录(据我所知,目前已经升级到完全合格的OpenID),依此类推......
但我仍然缺少的是完美的一体化解决方案.
在我的研究期间,我偶然发现了一些有趣的项目:
但我不想依赖外部提供商,我也想要一个免费的解决方案,所以我不受限制.
我还看到开发人员在遵循提供程序指令并为所有内容设置模型和数据库表之后,一个接一个地实现一个服务.
当然这可以工作,但它是一大堆工作,总是需要开发和更改您的应用程序等.
我正在寻找的是一个抽象层,它将所有服务都带到一个可以集成到我网站的标准中.一旦出现新服务,我只想添加一个处理该特定提供者抽象的模型,这样我就可以将它无缝地集成到我的应用程序中.
或者更好的是,找到一个我可以下载的现有解决方案.
理想情况下,这个抽象服务将独立于我的应用程序托管,因此它可以用于多个应用程序并独立升级.
上述3种解决方案中的最后一种看起来很有希望.一切都只是移植到合成的OpenID,网站jut必须实现OpenID.
过了一会儿,我找到了Django socialauth,一个基于python的Django Webframework身份验证系统.但它看起来像上面描述的那样运行,我认为这是Stackoverflow使用的相同登录系统(或者至少是一些修改过的fork ...).
我下载了它,并试图设置它,看看它是否可以设置为一个独立的解决方案,但我没有运气,因为我也不是这样的python.
我很想要一个基于PHP的解决方案.
所以在这篇长篇文章之后,我的问题恰恰是:
我希望这个问题不是太主观,提前谢谢.
更新:我的结论是构建一个代理/包装器或者你可以称之为Facebook的东西,将它移植到一个OpenID,因此它成为一个OpenID端点/提供者将是最好的选择.这就是我所做的.
请参阅下面的答案.
我添加了赏金以获得反馈/讨论.Maby我的方法并不像我现在认为的那样好!
php_flag display_errors 1
php_value auto_prepend_file init.php
RewriteEngine on
RewriteRule ^$ /id/authenticate [R]
RewriteRule ^login_openid$ /id/login_openid.php [QSA,L]
RewriteRule ^authenticate$ /id/authenticate.php [QSA,L]
RewriteRule ^facebook$ /id/facebook.php [QSA,L]
RewriteRule ^createfromopenid$ /id/createfromopenid.php [QSA,L]
RewriteRule .* - [L,R=403]
Run Code Online (Sandbox Code Playgroud)
这是我的.htaccess文件.在我刚刚拥有的serverconfig中AllowOVerride all.
如果我请求URL,http://mydomain.com/id/authenticate我会收到403错误.如果我删除最后一条规则,它就可以了.[L]公寓不应该阻止任何进一步的规则发生吗?
编辑:
我的htaccess文件位于子文件夹"id"中,因此规则有效.
在以下场景中:
我有一个项目目前有一万个视频文件的目录,数量将急剧增加.
但是很多都是重复的.对于每个视频文件,我都有关联的语义和描述性信息,我希望将这些信息合并为重复数据,以便为每个视频文件提供更好的结果.
现在我需要某种程序来索引数据库中的元数据,每当新视频进入目录时,计算相同的数据并在数据库中进行匹配.
问题是视频不是完全重复的.他们可以有不同的质量,amby裁剪,水印或续集/前传.或者在开始和/或结束时被切断.
不幸的是,比较越好cpu和内存密集度越高,所以我计划实现几层比较,从非常优雅但快速的比较开始(maby视频长度,容差为10%),最后的比较结束,决定是否它真的是重复(这将是社区投票).
因此,当我有一个社区来验证结果时,只需提供低错失率的"良好猜测"就足够了.
所以现在我的问题是你们可以想到什么层次,或者你有更好的方法?
我不关心创建元数据的努力,我有足够的奴隶来做到这一点.只是比较应该很快.所以,如果它有助于我可以将视频转换100次...
以下是我目前的想法:
视频长度(秒)
第一帧和最后一帧图片分析
如果此像素的颜色大于/小于0或1表示的平均值,我会将图片重新取样到缩略图大小并获得平均rgb值,然后逐个像素地序列化.所以我得到一个二进制字符串,我可以存储到mysql并做一个布尔位和(由内部的mysql支持)并计算剩余的非重要位(内部支持,然后是bianry字符串的Levenshtein距离)
我会将视频转码为具有完全相同设置的vbr videofile.然后我会看某些时间点的比特率(完成视频的百分比或绝对秒数......然后我们只分析视频的一部分).和图片一样的东西.如果比特率大于平均值1,则其为0.我们制作二进制字符串并将其存储在db中并稍后计算Levenshtein距离
音频分析(随着时间的推移比特率和分贝变化,就像视频的比特率一样)
关键帧分析
图像comarision就像第一帧和最后一帧,但在关键帧位置?我们将使用与比特率计算相同的源文件,因为关键帧很大程度上取决于编解码器和设置.
也许让我们在图像中取一个或多个区域/像素,看看它们是如何随着时间的推移而发展的.同样,变化大于/低于平均水平.我认为黑/白就足够了.
还是我走错了路?我想我不能成为第一个遇到这个问题的人,但我没有找到解决方案.
language-agnostic video comparison fingerprint audio-fingerprinting
Amazon S3提供两种计划:
存储(设计用于99.999999999%耐久性)
和
减少冗余存储(设计耐久性为99.99%)
设计用于在给定年份内提供99.999999999%的耐久性和99.99%的对象可用性.
那么,如果我有10 000个文件,我可以期望每年平均放松一个第二个计划?我正确地解释了吗?
编辑:Maby我必须更明确地说:
你如何解释特别是"为...而设计"部分.例如,如果提供99.9%的可用性我保证并且每小时支付一次罚款或类似的东西.但是,如果我将系统设计为99.9%的可用性,我选择的部件应该知道系统的统计平均停机时间可能为0.1%.
这并不一定意味着我保证任何事情.它正是系统设计的目的......
我有一个用户表,用户ID是公共的.但是我想混淆注册用户的数量和项目的趋势,所以我不希望公共递增ID.
创建新用户时,我想找到一个大于某个数字但尚未存在于数据库中的随机整数.
天真的代码:
<?php
$found = false;
while(!$found) {
$uid = rand(1000000000,4294967295) // find random number betwen minimum and maximum
$dbh->beginTransaction();
// check if user id is in use, and if not insert it
if($dbh->query("SELECT * FROM users WHERE uid = $uid")) {
$dbh->exec("INSERT INTO users (uid) VALUES ($uid)");
$found = true;
}
$dbh->commit();
}
// we just got our new uid ...
?>
Run Code Online (Sandbox Code Playgroud)
这将起作用,但可能会变得低效.确实有一个很大的范围,击中未使用的uid的可能性很高.但是,如果我想使用较小的范围,因为我不想拥有这么长的用户名怎么办?
我担心的例子:
因此,我想到的一种优化方法如下:
这应该给我一个最大运行时间为O(范围)的数字
这听起来很糟糕,但我认为不是,因为我向数据库提交随机数,并且他们都是初学者,这是不太可能的.那真的有多好/多少呢? …
这是我的查询:
SELECT autor.entwickler,anwendung.name
FROM autor
left join anwendung
on anwendung.name = autor.anwendung;
entwickler | name
------------+-------------
Benutzer 1 | Anwendung 1
Benutzer 2 | Anwendung 1
Benutzer 2 | Anwendung 2
Benutzer 1 | Anwendung 3
Benutzer 1 | Anwendung 4
Benutzer 2 | Anwendung 4
(6 rows)
Run Code Online (Sandbox Code Playgroud)
我想为字段中的每个不同值保留一行name,并丢弃其他如下:
entwickler | name
------------+-------------
Benutzer 1 | Anwendung 1
Benutzer 2 | Anwendung 2
Benutzer 1 | Anwendung 3
Benutzer 1 | Anwendung 4
Run Code Online (Sandbox Code Playgroud)
在MySQL中,我会这样做:
SELECT autor.entwickler,anwendung.name
FROM autor …Run Code Online (Sandbox Code Playgroud) 我想将SpeechRecognition api 与音频文件(mp3,wave等)一起使用.这可能吗?
mysql ×3
php ×3
html5 ×2
amazon-s3 ×1
apache ×1
comparison ×1
connection ×1
duplicates ×1
durability ×1
facebook ×1
fingerprint ×1
html ×1
http ×1
javascript ×1
mod-rewrite ×1
openid ×1
pdo ×1
postgresql ×1
primary-key ×1
random ×1
security ×1
select ×1
sql ×1
tree ×1
trie ×1
video ×1
xhtml ×1