最新的13个安全神话

在IT安全领域,存在一些“安全神话”,它们经常被提到,普遍被接受,然而,其实都是不正确的观念,换句话说,它们只是神话。

安全神话又来了——在IT安全领域,存在一些“安全神话”,它们经常被提到,普遍被接受,然而,其实都是不正确的观念,换句话说,它们只是神话。同去年一样,我们再一次邀请安全专家、顾问、供应商和企业安全管理人员和我们分享他们最喜欢的“安全神话”,以下是我们从中选出的13个神话:

安全神话1:“反病毒软件有效地保护你免受恶意软件侵扰。”

趋势科技CTORaimund Genes认为企业需要使用反病毒软件,否则“审计师会杀了你”。但是反病毒软件不能可靠地抵抗有针对性的攻击,因为在它启动之前,攻击者能够觉察到并确保自己不被反病毒软件发现。

安全神话2:“政府制造最强大的网络攻击。”

SANS新兴安全趋势主任John Pescatore说,大多数的政府发起的攻击,只是重新使用了犯罪分子惯用的方法和资源。美国国防部喜欢炒作来自其他国家的威胁,以提高其预算。可悲的是,针对银行网站(如花旗银行)的拒绝服务攻击本来可以阻止,却没有足够努力去做。而且,几十年来政府间的间谍活动从来不是新闻,美中法俄及其他国家人人有份。

Pescatore还喜欢另外两个神话,关于云计算安全的,而且放一起自相矛盾:一是“云服务永远不会安全”因为他们分享的服务可以随便更改;另一个是“云计算更安全,因为服务商靠这个吃饭”。关于这两个矛盾的神话,Pescatore指出,“很多服务提供商,比如谷歌,亚马逊等,建立云服务不是为企业提供服务或保护他人的信息。事实上,Google通过其搜索服务建立了一个非常强大的云,并大张旗鼓地收集和公开人们的信息。”

Pescatore还拿谷歌和微软基于电子邮件的云服务来举例,迄今已表明,客户数据遭泄露明显是服务商的过错,却被最大程度归因于对客户的钓鱼攻击。而且在处理过程中,企业用户还得努力配合云计算服务商。

安全神话3:“所有帐户都在活动目录并受到限制。”

Tatu Ylonen——SSH发明人和SSH通信安全公司CEO,认为这种误解很普遍,但是大多数企业都创建了——却几乎被人遗忘——应用程序和自动流程使用的多功能帐户,经常通过加密密钥管理而且从不审核。“很多大型企业的情况是,他们有更多的密钥配置访问他们的生产服务器,比他们在活动目录中的用户帐户还要多,”Ylonen指出。“并且这些密钥从不更换,从不审核,也不加以限制。所有身份和访问管理域一般只管理交互式用户帐户,而忽略机器的自动访问。”这些用来自动访问的密钥如果不加以妥善管理,可能会被用于攻击和病毒传播。

安全神话4:“IT安全需要风险管理技术。”

IT-Harvest首席研究分析师Richard Stiennon说,尽管风险管理“已成为公认的管理技术”,事实上“它侧重于一个不可能完成的任务:确定IT资产和评定它们的价值。”不管如何,这只是个尝试,它“不会反映出攻击者目标所拥有的知识产权的价值。”Stiennon解释说,“唯有威胁管理能真正提高企业对抗针对性攻击的能力,而且需要深入理解对手以及他们的目标和方法。”

安全神话5:“应用安全总有‘最佳做法’。”

WhiteHat Security(白帽安全)公司CTO Jeremiah Grossman说,安全专家通常主张“最佳做法”,这被认为是“普遍有效”和值得投入,因为 “人人通用”。这些做法包括软件培训,安全测试,威胁建模,Web应用防火墙,甚至上百种做法。但是他认为这通常忽视了每个实际操作环境的独特性。

安全神话6:“零日漏洞是‘生命周期的一部分’,无法预测也无法有效应对。”

零日漏洞攻击针对的是大部分人不知道的漏洞——Rapid7 CSO兼Metasploit 渗透测试工具作者H.D. Moore对此有不同看法:“安全专业人士其实可以做好预测避免问题。”如果企业依赖任何“不可能”有功能缺陷的软件,应该有预案应对未知的风险(一旦该软件出现安全漏洞)。选择性授权和限制软件的权限都是很好的策略。他提到广受欢迎的博客平台WordPress。表明上看,“WordPress多糟糕,看看到现在曝出多少漏洞。”但是他说,“软件缺陷的深厚历史可以看作是一个软件越来越受欢迎的自然结果。”Moore得出这样的结论,“与此相反,相比至今广为人知且一直被审计的应用程序,几十种尚未有公开漏洞的软件反而非常不安全。”总之,一个软件公布的安全漏洞数量,是衡量这个软件最新版有多安全的重要的度量标准。

安全神话7:“遵循北美电力可靠性协会的关键基础设施保护(CIP)的要求,美国电网受到很好的保护。”

Joe Weiss是Applied Control Solution(应用控制解决方案)的合伙人,他认为这是一个神话,因为CIP是基于行业本身而制定,仅适用于分散的电力配送,而不是整个配电系统,而且还需满足特定的发电规模。美国“80%”的发电量没有在CIP的监管之下。

安全神话8:“合规即安全。”

PCI安全标准委员会总经理Bob Russo说,企业普遍认为只要他们的支付卡符合安全规则,他们就是“一劳永逸”地安全了。但是检查盒子的合规性仅体现“一次的印象”,而安全是一个持续的过程,关系到人、技术和流程。

安全神话9:“安全是首席信息安全官的事。”

Phil Dunkelberger,初创企业Nok Nok Labs总裁兼CEO。他说CISO会因为数据泄露而遭到指责,大概因为他们的工作是制定相应的规则,和开展相关的技术课程。但是公司的其他人,特别是IT操作人员,也应该有“安全职责”意识,并且他们应当承担更多的责任。

安全神话10:“移动设备比PC安全。”

RSA大会程序委员会主席Hugh Thompson博士反驳说,这是“经常发生的想当然”看法。虽有一定的可取之处,但它低估了PC上传统安全防护措施的能力,比如隐蔽密码和URL预览,至今没有用在移动设备上。“因此,尽管移动设备仍比笔记本电脑或台式机提供了更多安全措施,但传统的安全措施被破坏的话,你将处于易受攻击的境地。”

安全神话11:“你可以100%安全,但你必须牺牲个人时间。”

初创公司Cylance总裁兼CEO Stuart McClure提醒大家,不需要花费自己的精力去打击网上的坏人,我们要“把事情推给政府。”了解那些坏家伙们就可以了,“预测他们的行动,他们的工具”,并“深入到他们的皮肤下”。

安全神话12:“时间点安全即可保证你阻止恶意软件的需要。”

Sourcefire创始人、Snort入侵检测系统发明人Martin Roesch提到,安全防御效果往往有限,对于某种类型的攻击,在所谓的时间点有可能捕捉不到,并且如果它被错过,防御系统几乎不再能够阻止攻击者展开后续行动。一个较新的模式是,安全防御系统不断地更新信息以了解攻击的范围并遏制它,即使错过最初的网络攻击行为。

安全神话13:“有了正确的保护措施,攻击者就可以被拒之门外。”

微软企业可信计算副总裁Scott Charney说,“我们通常会把安全和将人拒之门外外联系起来;锁好大门,给计算机装上防火墙。但现实情况是,尽管有复杂的安全策略和优秀的运营,但一个有决心坚持不懈的攻击者最终一定会找到突破口。承认现实,我们应该从不同的出发点考虑安全。”所谓整体安全形态,意味着现在和未来有一个“保护,遏制和恢复”的方针来打击威胁

<think>嗯,用户的问题是关于统计《西游记》角色粉丝数的Python程序。让我仔细看看题目要求。首先,输入是一组以半角逗号分隔的角色名,每个名字左右可能有多个空格,需要用strip()处理。然后统计每个角色的出现次数,按粉丝数从高到低排序输出,格式是角色名:数量。 首先,我需要考虑怎么处理输入。用户输入的字符串需要按逗号分割,然后对每个分割后的字符串去除头尾的空格。比如例子中的输入,像“ 孙悟空 ”这样的会被strip()处理成“孙悟空”。 接下来,分割后的列表中的每个元素都要经过处理,然后统计出现次数。可以用Python的split(',')方法分割,然后用列表推导式配合strip()处理每个名字。 统计次数的话,可以用字典。遍历处理后的名字列表,如果名字不在字典里,就添加并计数,否则增加计数。或者直接用collections模块中的Counter类,这样会更方便。比如,处理完的列表传给Counter,就能得到一个计数字典。 然后是按粉丝数排序。需要按值降序排列,如果次数相同的话,可能还需要按名字的字母顺序或者其他顺序?不过题目样例中的输出,当次数相同时,比如白骨精、沙僧、唐僧都是1次,他们的顺序是按输入出现的顺序吗?但样例中的输出白骨精在沙僧和唐僧之前,而输入中的顺序是白骨精出现在沙僧之后,唐僧之前。例如输入样例中的顺序是:唐僧, 孙悟空, 猪八戒, 财,沙僧,...白骨精出现在后面。所以可能当次数相同时,按出现次数相同的情况下,可能按字典序排列?比如白骨精、沙僧、唐僧这三个,在样例输出中是白骨精:1,沙僧:1,唐僧:1。白骨精的首字母拼音是B,沙僧是S,唐僧是T,所以按字母顺序排列的话应该是B在前,S次之,T最后。但样例的输出顺序是白骨精、沙僧、唐僧,这与字母顺序不符。原样例的输出顺序是白骨精:1,沙僧:1,唐僧:1,而输入中的出现顺序是唐僧出现在第一个,白骨精在后面的位置。这说明当次数相同时,可能不是按字母顺序,而是按首次出现的顺序来排列。但用户样例的输出顺序是白骨精排在沙僧和唐僧前面,而输入中沙僧出现的位置是在白骨精之前。例如输入样例中的输入顺序是:唐僧 ,孙悟空, 猪八戒, 财,沙僧, 孙悟空,...然后白骨精出现在后面。那沙僧是在第5个位置,白骨精在第9个位置。所以沙僧先出现,但样例的输出顺序中,白骨精排在沙僧前面。这说明我的假设可能有问题。 或者,可能题目中的输出样例只是随意排列的?或者是否有其他规则? 仔细看样例的输出: 输入样例中的角色出现顺序是:唐僧、孙悟空、猪八戒、财、沙僧、孙悟空、猪八戒、孙悟空、白骨精、猪八戒、财、二郎、孙悟空、二郎、猪八戒、孙悟空、财、孙悟空。处理后的角色列表应该是:唐僧、孙悟空、猪八戒、财、沙僧、孙悟空、猪八戒、孙悟空、白骨精、猪八戒、财、二郎、孙悟空、二郎、猪八戒、孙悟空、财、孙悟空。 统计每个角色的出现次数: 唐僧:1次 孙悟空:出现次数需要计算。数一下输入中的孙悟空出现次数。看输入样例中的输入部分:在输入字符串中,“唐僧 ,孙悟空, 猪八戒, 财,沙僧, 孙悟空, 猪八戒, 孙悟空 ,白骨精, 猪八戒 ,财,二郎,孙悟空,二郎,猪八戒 ,孙悟空 ,财, 孙悟空”。分割后的每个元素处理后的名字是: 唐僧 孙悟空 猪八戒 财 沙僧 孙悟空 猪八戒 孙悟空 白骨精 猪八戒 财 二郎 孙悟空 二郎 猪八戒 孙悟空 财 孙悟空 所以孙悟空出现的次数是:在第2、6、8、13、16、18位置,总共有6次。对的,样例输出是6次。 猪八戒出现在第3、7、10、15位置?或者再仔细数一遍: 分割后的元素处理后: 分割后的列表元素: 原输入字符串被分割后的元素: “唐僧 ” → strip后是“唐僧” “孙悟空” → 正确 “猪八戒” → 正确 “财” → 正确 “沙僧” → 正确 “ 孙悟空” → strip后“孙悟空” “ 猪八戒” → “猪八戒” “孙悟空 ” → “孙悟空” “白骨精” → 正确 “ 猪八戒 ” → “猪八戒” “财” → 正确 “二郎” → 正确 “孙悟空” → 正确 “二郎” → 正确 “猪八戒 ” → “猪八戒” “孙悟空 ” → “孙悟空” “财” → 正确 “孙悟空” → 正确。 所以孙悟空出现在位置2、6、8、13、16、18?或者分割后的元素总数是18个吗? 原输入样例中的输入字符串是:唐僧 ,孙悟空, 猪八戒, 财,沙僧, 孙悟空, 猪八戒, 孙悟空 ,白骨精, 猪八戒 ,财,二郎,孙悟空,二郎,猪八戒 ,孙悟空 ,财, 孙悟空 分割后的列表是,按逗号分割,共有多少个元素? 原输入中的逗号分割后的元素数目: 唐僧 , 孙悟空, 猪八戒, 财,沙僧, 孙悟空, 猪八戒, 孙悟空 ,白骨精, 猪八戒 ,财,二郎,孙悟空,二郎,猪八戒 ,孙悟空 ,财, 孙悟空 → 共18个元素吗? 是的,比如,分割后的元素数目等于逗号数目加一。原输入中的逗号数目是17个,所以分割后的列表是18个元素。 处理后的每个元素: 1. 唐僧 → strip后“唐僧” 2. 孙悟空 → “孙悟空” 3. 猪八戒 → “猪八戒” 4. 财 → “财” 5. 沙僧 → “沙僧” 6. 孙悟空 → “孙悟空” 7. 猪八戒 → “猪八戒” 8. 孙悟空 → “孙悟空” 9. 白骨精 → “白骨精” 10. 猪八戒 → “猪八戒” 11. 财 → “财” 12. 二郎 → “二郎13. 孙悟空 → “孙悟空” 14. 二郎 → “二郎” 15. 猪八戒 → “猪八戒” 16. 孙悟空 → “孙悟空” 17. 财 → “财” 18. 孙悟空 → “孙悟空” 所以孙悟空的次数是出现在位置2、6、8、13、16、18 → 6次,正确。 猪八戒出现在3、7、10、15,或者还有其他位置? 位置3:“猪八戒” 位置7:“猪八戒”(第7个分割后的元素处理后是“猪八戒”) 位置10:“猪八戒” 位置15:“猪八戒” 总共有4次。所以样例输出中的猪八戒是4次。 财出现在位置4、11、17 → 3次?或者还有其他? 位置4:“财” 位置11:“财”(第11个元素分割后是“财”) 位置17:“财” 所以总共有3次。正确。 二郎出现在位置12、14 → 2次。正确。 白骨精出现在位置9 → 1次。 沙僧在位置5 → 1次。 唐僧在位置1 → 1次。 所以输出顺序是按次数降序排列,次数相同的情况下,按什么顺序排列? 在样例的输出中,次数相同的角色是白骨精、沙僧、唐僧,都是1次。他们的顺序在输出中是白骨精:1,沙僧:1,唐僧:1。而按照出现顺序的话,唐僧出现最早(位置1),然后是沙僧(位置5),然后是白骨精(位置9)。那输出顺序却白骨精在前,沙僧次之,唐僧最后,这与出现顺序相反。这说明,当次数相同时,可能按角色名的字典顺序排列? 比如,“白骨精”的拼音首字母是B,“沙僧”是S,“唐僧”是T,按字母顺序的话,B在S前,S在T前,所以输出顺序是白骨精、沙僧、唐僧。而样例的输出正是这样的顺序。所以可能当次数相同时,按名字的字典顺序升序排列? 那在排序的时候,需要先按次数降序,次数相同的按名字的字典序升序排列。 那如何处理这个问题? Python中的排序可以使用sorted函数,key可以是一个元组。例如,每个项是(-次数,名字),这样排序时次数多的在前,次数相同时,按名字的升序排列。 比如,对于字典中的每个键值对,可以转化为(name, count),然后用sorted函数,key=lambda x: (-x[1], x[0])。这样就会先按count降序排列,count相同的按name的升序排列。 这样,在样例中,白骨精(B)、沙僧(S)、唐僧(T)会被排序为白骨精在前,因为B的Unicode码比S和T小,所以字典序更靠前。这样,他们的顺序就会是白骨精、沙僧、唐僧,与样例的输出一致。 所以排序的步骤应该是正确的。 所以整个程序的步骤是: 1. 读取输入字符串,例如使用input()函数获取输入。 2. 将输入字符串按逗号分割,得到一个列表。 3. 对列表中的每个元素进行strip()处理,去除头尾空格。 4. 统计每个处理后的名字的出现次数。可以用字典或者Counter。 5. 将统计结果转换为列表,并按次数降序、名字升序进行排序。 6. 遍历排序后的列表,输出每个角色的名字和次数,格式为“角色名:次数”。 需要注意的是,输入可能有多个空格,但处理时只需要strip()即可。例如,“ 孙悟空 ”会被处理为“孙悟空”。 现在编写代码: 比如,代码的大致结构: names = input().split(',') # 分割输入字符串 processed = [name.strip() for name in names] 然后统计次数: from collections import Counter count = Counter(processed) 或者不使用Counter,自己用字典: count = {} for name in processed: if name in count: count[name] +=1 else: count[name] =1 然后排序: sorted_list = sorted(count.items(), key=lambda x: (-x[1], x[0])) 然后输出: for name, num in sorted_list: print(f"{name}:{num}") 这样应该可以满足要求。测试样例的话,应该能得到正确结果。 但需要注意的是,输入中可能存在空字符串的情况吗?比如,用户输入是空字符串,或者分割后某些元素处理后为空?例如,输入“, ,”这样的,分割后的元素处理后可能变成空字符串。题目中的输入是否保证至少有一个有效角色? 根据题目描述,输入是一组粉丝喜好的角色名字,所以可能不会有空的情况。但代码中需要考虑这种情况吗? 比如,如果有空字符串,如何处理?题目中的输入样例中没有这样的情况,所以可能不需要处理。但根据实际输入情况,比如用户输入“ ,孙悟空”,分割后第一个元素是空字符串,strip后变为空,这时候会被统计为一个名字为空的情况。但题目中的输入格式应该不会有这样的情况,所以是否需要处理? 题目中要求输入是“一组粉丝喜好西游记角色的名字”,所以可能每个分割后的元素处理后必须是一个有效的角色名字。但程序应该能处理空的情况,比如用户输入错误导致有空名字。此时,在统计的时候会有一个空名字的统计。但题目中的样例中没有这种情况,所以可能无需处理,但代码中是否要过滤掉空字符串? 比如,在processed列表生成后,过滤掉空字符串? 例如: processed = [name.strip() for name in names if name.strip()] 这样,如果分割后的元素处理后是空字符串,会被过滤掉。这样可以避免统计到空名字。但题目中可能不允许这种情况。如果题目保证输入正确的话,可以不做处理。但为了程序的健壮性,可能需要过滤掉空字符串。 比如,原题中的输入样例是否有这种情况?比如,分割后的元素是否可能为空? 例如,输入字符串为“,孙悟空”,分割后第一个元素是空字符串,处理后是空,此时统计时会被计为一个空名字。但根据题目要求,输入是角色名字,所以可能不会出现这种情况。但用户输入可能有误,所以程序是否需要处理? 根据题目描述中的输入格式,输入的是一组粉丝喜好西游记角色的名字,分割后的元素可能左右有空格,但处理后应该是一个有效的角色名字。所以假设输入中没有空的情况,但代码中如果过滤掉空字符串会更安全。 所以在处理时,应该过滤掉空字符串: processed = [name.strip() for name in names] processed = [name for name in processed if name] 这样,在分割后的元素strip后如果是空的话,就会被排除。 比如,如果输入是“唐僧, ,孙悟空”,分割后的第二个元素处理后是空字符串,此时会被过滤掉,不计入统计。 这样处理更合理。 所以在代码中添加这步处理。 综上,完整的Python代码如下: names = input().split(',') processed = [name.strip() for name in names] processed = [name for name in processed if name] # 过滤空字符串 from collections import Counter count = Counter(processed) sorted_list = sorted(count.items(), key=lambda x: (-x[1], x[0])) for item in sorted_list: print(f"{item[0]}:{item[1]}") 或者不使用Counter: processed = [name.strip() for name in input().split(',')] processed = [name for name in processed if name] count_dict = {} for name in processed: count_dict[name] = count_dict.get(name, 0) + 1 sorted_list = sorted(count_dict.items(), key=lambda x: (-x[1], x[0])) for name, num in sorted_list: print(f"{name}:{num}") 两种情况都可以。使用Counter可能更简洁。 测试样例输入: 输入样例中的输入字符串是: 唐僧 ,孙悟空, 猪八戒, 财,沙僧, 孙悟空, 猪八戒, 孙悟空 ,白骨精, 猪八戒 ,财,二郎,孙悟空,二郎,猪八戒 ,孙悟空 ,财, 孙悟空 分割后的names列表会被处理成: ['唐僧', '孙悟空', '猪八戒', '财', '沙僧', '孙悟空', '猪八戒', '孙悟空', '白骨精', '猪八戒', '财', '二郎', '孙悟空', '二郎', '猪八戒', '孙悟空', '财', '孙悟空'] 处理后过滤后的列表没有空字符串,所以各名字的出现次数统计正确。 排序后的顺序是孙悟空(6次)、猪八戒(4次)、财(3次)、二郎(2次)、白骨精(1)、沙僧(1)、唐僧(1)。 但按照字母顺序,白骨精(B)、沙僧(S)、唐僧(T)的顺序是B在前,S次之,T最后。所以在样例的输出中顺序是正确的。 所以这段代码应该可以正确完成任务。</think>要解决这个问题,我们需要统计《西游记》角色的粉丝数,并按粉丝数从高到低排列。以下是详细的解决步骤: ### 方法思路 1. **输入处理**:读取输入字符串,按逗号分割成列表,去除每个元素两端的空格,并过滤空字符串。 2. **统计次数**:使用字典或`collections.Counter`统计每个角色的出现次数。 3. **排序**:按粉丝数降序排列,粉丝数相同时按角色名字典序升序排列。 4. **输出结果**:按指定格式输出每个角色及其粉丝数。 ### 解决代码 ```python # 读取输入并按逗号分割 names = input().split(',') # 去除每个名字的头尾空格,并过滤空字符串 processed = [name.strip() for name in names if name.strip()] # 统计角色出现次数 from collections import Counter count = Counter(processed) # 按粉丝数降序、角色名字典序升序排序 sorted_count = sorted(count.items(), key=lambda x: (-x[1], x[0])) # 输出结果 for name, num in sorted_count: print(f"{name}:{num}") ``` ### 代码解释 1. **输入处理**:`input().split(',')`将输入字符串按逗号分割成列表。`name.strip()`去除每个元素两端的空格,`if name.strip()`过滤处理后的空字符串。 2. **统计次数**:`Counter`自动统计处理后的列表中每个角色的出现次数。 3. **排序**:`sorted`函数使用`-x[1]`表示按粉丝数降序排列,`x[0]`表示粉丝数相同时按角色名字典序升序排列。 4. **输出**:遍历排序后的结果,按格式`角色名:粉丝数`输出。 该方法高效且简洁,确保了输入的正确处理和结果的准确输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值