热点
手机体验师:三星Z Flip7 FE何时入手最划算?,reasoning_content:我们要求以手机体验师的口吻,写一个关于三星Galaxy Z Flip7 FE最佳入手时机全解析的标题需要简短精炼,30字以内直接输出标题,不要加说明nn注意:标题要体现手机体验师的口吻,可能用第一人称或专家的语气例如:手机体验师教你:三星Z Flip7 FE何时入手最划算? 但字数要控制最好更简洁nn可能的三星Z Flip7 FE最佳入手时机,手机体验师详解 但字数超了?数一下:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 共16个字?中文:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 实际字符:三、星、Z、空、格、F、l、i、p、7、空、格、F、E、最、佳、入、手、时、机、,、手、机、体、验、师、详、解 – 共28个字符?注意:中文标点算一个,空格算一个但通常标题中空格可以省略或者用英文的Z Flip7 FE中间空格?最好简洁nn更简洁:手机体验师:三星Z Flip7 FE何时入手最佳? 字数:手机体验师:三星Z Flip7 FE何时入手最佳? – 共16个汉字+英文?数:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、何、时、入、手、最、佳、? – 25个字符,可以但Z Flip7 FE中空格可以去掉?通常写法为Z Flip7 FE 或 Galaxy Z Flip7 FE?标题中写三星Galaxy Z Flip7 FE太长可以简化为三星Z Flip7 FEnn但原要求是三星Galaxy Z Flip7 FE,但标题可以省略Galaxy?三星Galaxy Z Flip7 FE共11个汉字+英文?我们尽量完整目标30字以内,完全可以用全称例如:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共16个字?数一下:三、星、G、a、l、a、x、y、空格、Z、空格、F、l、i、p、7、空格、F、E、最、佳、入、手、时、机、全、解、析 – 28个字符,稍微超了一点?注意:中文汉字每个占一个字符,英文字母和空格也占一个28个字符,但通常标题字数指汉字数量?不严格但为了保险,可以更精简nn或者:手机体验师解析三星Z Flip7 FE最佳入手时机 – 汉字+英文:手机体验师解析三星Z Flip7 FE最佳入手时机 – 共18个汉字?数:手、机、体、验、师、解、析、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机 – 24个字符,可以但缺了全解析?或者直接用最佳入手时机解析nn考虑到要体现手机体验师的口吻,最好以第一人称或专家身份例如:手机体验师:三星Z Flip7 FE何时入手最划算? 这个很简洁或者手机体验师教你选三星Z Flip7 FE入手时机 但字数nn最终决定:用手机体验师:三星Galaxy Z Flip7 FE最佳入手时机 但少了全解析?可以加解析二字但字数可能超我们严格数一下:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、G、a、l、a、x、y、空、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共34个字符,超了30字所以需要精简nn去掉Galaxy:手机体验师:三星Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共27个字符,可以注意:冒号算一个,空格算两个(Z后面和7后面各一个?Z Flip7 FE中,通常Z后面有空格,Flip7后面有空格,FE前面有空格?实际上标准写法是Z Flip7 FE,三个单词之间有两个空格但也可以写为Z Flip7 FE 或 Z Flip7 FE 我们数一下:Z空格F l i p 7空格F E – 实际上Z后空格,Flip7是一个整体?Flip7没有空格?通常Flip7是连写,但一般写作Flip 7?这里明确是Z Flip7 FE,Flip7可能是一个词?为了准确,我们按原要求Z Flip7 FE中有空格:Z空格Flip7空格FE?但原题是Z Flip7 FE,我理解为Z,空格,Flip7,空格,FE但Flip7本身没有空格,所以总共两个空格那么字符数:Z(1),空格(1),F(1),l(1),i(1),p(1),7(1),空格(1),F(1),E(1) – 共10个英文字符+2个空格=12个加上前面的汉字手机体验师:三星共7个汉字(手、机、体、验、师、:、三、星)共8个?注意:冒号是中文标点,算一个字符所以汉字部分:手机体验师:三星 – 7个字符(手、机、体、验、师、:、三、星)?实际上手机体验师是4个字,冒号1个,三星2个字,共7个汉字/标点然后英文12个,再加上最佳入手时机全解析共8个汉字(最、佳、入、手、时、机、全、解、析)共9个?全解析是3个字,加上最佳入手时机是5个字,共8个字?不对:最佳入手时机全解析 – 最佳(2)、入手(2)、时机(2)、全(1)、解析(2) 共9个汉字所以总汉字/标点:7+9=16个,英文12个,总28个字符,在30以内可以nn但为了更简洁,也可以去掉全,直接最佳入手时机解析也是8个字?最佳入手时机解析是7个字(最佳2、入手2、时机2、解析2)共8?不对,解析是2个字,共2+2+2+2=8加上前面的7+8=15,英文12=27,也可以或者用最佳入手时机详解nn另一个想法:直接以手机体验师开头,用问句形式手机体验师:三星Z Flip7 FE何时入手最划算? – 字符数:手机体验师:三星Z Flip7 FE何时入手最划算? – 汉字:手、机、体、验、师、:、三、星、何、时、入、手、最、划、算、? – 共16个汉字+标点,英文12个,共28个,合适这个更口语化,符合手机体验师的口吻nn我选择这个
14 9 月 2026, 周一

Web开发中常见的安全缺陷及解决办法

提纲:

一、不能盲目相信用户输入

二、五种常见的ASP.NET安全缺陷

2.1 篡改参数

2.2 篡改参数之二

2.3 信息泄漏

2.4 SQL注入式攻击

2.5 跨站脚本执行

三、使用自动安全测试工具

正文:

保证应用程序的安全应当从编写第一行代码的时候开始做起,原因很简单,随着应用规模的发展,修补安全漏洞所需的代价也随之快速增长。根据IBM的系统科学协会(Systems Sciences Institute)的研究,如果等到软件部署之后再来修补缺陷,其代价相当于开发期间检测和消除缺陷的15倍。

为了用最小的代价保障应用程序的安全,在代码本身的安全性、抗御攻击的能力等方面,开发者应当担负更多的责任。然而,要从开发的最初阶段保障程序的安全性,必须具有相应的技能和工具,而真正掌握这些技能和工具的开发者并不是很多。虽然学写安全的代码是一个复杂的过程,最好在大学、内部培训会、行业会议上完成,但只要掌握了下面五种常见的ASP.NET应用安全缺陷以及推荐的修正方案,就能够领先一步,将不可或缺的安全因素融入到应用的出生之时。

一、不能盲目相信用户输入

在Web应用开发中,开发者最大的失误往往是无条件地信任用户输入,假定用户(即使是恶意用户)总是受到浏览器的限制,总是通过浏览器和服务器交互,从而打开了攻击Web应用的大门。实际上,黑客们攻击和操作Web网站的工具很多,根本不必局限于浏览器,从最低级的字符模式的原始界面(例如telnet),到CGI脚本扫描器、Web代理、Web应用扫描器,恶意用户可能采用的攻击模式和手段很多。

因此,只有严密地验证用户输入的合法性,才能有效地抵抗黑客的攻击。应用程序可以用多种方法(甚至是验证范围重叠的方法)执行验证,例如,在认可用户输入之前执行验证,确保用户输入只包含合法的字符,而且所有输入域的内容长度都没有超过范围(以防范可能出现的缓冲区溢出攻击),在此基础上再执行其他验证,确保用户输入的数据不仅合法,而且合理。必要时不仅可以采取强制性的长度限制策略,而且还可以对输入内容按照明确定义的特征集执行验证。下面几点建议将帮助你正确验证用户输入数据:

⑴ 始终对所有的用户输入执行验证,且验证必须在一个可靠的平台上进行,应当在应用的多个层上进行。

⑵ 除了输入、输出功能必需的数据之外,不要允许其他任何内容。

⑶ 设立“信任代码基地”,允许数据进入信任环境之前执行彻底的验证。

⑷ 登录数据之前先检查数据类型。

⑸ 详尽地定义每一种数据格式,例如缓冲区长度、整数类型等。

⑹ 严格定义合法的用户请求,拒绝所有其他请求。

⑺ 测试数据是否满足合法的条件,而不是测试不合法的条件。这是因为数据不合法的情况很多,难以详尽列举。

二、五种常见的ASP.NET安全缺陷

下面给出了五个例子,阐述如何按照上述建议增强应用程序的安全性。这些例子示范了代码中可能出现的缺陷,以及它们带来的安全风险、如何改写最少的代码来有效地降低攻击风险。

2.1 篡改参数

◎ 使用ASP.NET域验证器

盲目信任用户输入是保障Web应用安全的第一敌人。用户输入的主要来源是HTML表单中提交的参数,如果不能严格地验证这些参数的合法性,就有可能危及服务器的安全。

下面的C#代码查询后端SQL Server数据库,假设user和password变量的值直接取自用户输入:




从表面上看,这几行代码毫无问题,实际上却可能引来SQL注入式攻击。攻击者只要在user输入域中输入“OR 1=1”,就可以顺利登录系统,或者只要在查询之后加上适当的调用,就可以执行任意Shell命令:




■ 风险分析

在编写这几行代码时,开发者无意之中作出了这样的假定:用户的输入内容只包含“正常的”数据——合乎人们通常习惯的用户名字、密码,但不会包含引号之类的特殊字符,这正是SQL注入式攻击能够得逞的根本原因。黑客们可以借助一些具有特殊含义的字符改变查询的本意,进而调用任意函数或过程。

■ 解决方案

域验证器是一种让ASP.NET开发者对域的值实施限制的机制,例如,限制用户输入的域值必须匹配特定的表达式。

要防止上述攻击行为得逞,第一种办法是禁止引号之类的特殊字符输入,第二种办法更严格,即限定输入域的内容必须属于某个合法字符的集合,例如“[a-zA-Z0-9]*”。

2.2 篡改参数之二

◎ 避免验证操作的漏洞

然而,仅仅为每个输入域引入验证器还不能防范所有通过修改参数实施的攻击。在执行数值范围检查之时,还要指定正确的数据类型。

也就是说,在使用ASP.NET的范围检查控件时,应当根据输入域要求的数据类型指定适当的Type属性,因为Type的默认值是String。




■ 风险分析

由于没有指定Type属性值,上面的代码将假定输入值的类型是String,因此RangeValidator验证器只能确保字符串由0-9之间的字符开始,“0abcd”也会被认可。

■ 解决方案

要确保输入值确实是整数,正确的办法是将Type属性指定为Integer:




2.3 信息泄漏

◎ 让隐藏域更加安全

在ASP.NET应用中,几乎所有HTML页面的__VIEWSTATE隐藏域中都可以找到有关应用的信息。由于_VIEWSTATE是BASE 64编码的,所以常常被忽略,但黑客可以方便地解码BASE 64数据,用不着花什么力气就可以得到__VIEWSTATE提供的详细资料。

■ 风险分析

默认情况下,__VIEWSTATE数据将包含:

⑴ 来自页面控件的动态数据。

⑵ 开发者在ViewState中显式保存的数据。

⑶ 上述数据的密码签字。

■ 解决方案

设置EnableViewStatMAC=”true”,启用__VIEWSTATE数据加密功能。然后,将machineKey验证类型设置成3DES,要求ASP.NET用Triple DES对称加密算法加密ViewState数据。

2.4 SQL注入式攻击

◎ 使用SQL参数API

正如前文“篡改参数”部分描述的,攻击者可以在输入域中插入特殊字符,改变SQL查询的本意,欺骗数据库服务器执行恶意的查询。

■ 风险分析

恶意查询有可能获取后端数据库保存的任何信息,例如客户信用卡号码的清单。

■ 解决方案

除了前面介绍的办法——用程序代码确保输入内容只包含有效字符,另一种更加健壮的办法是使用SQL参数API(例如ADO.NET提供的API),让编程环境的底层API(而不是程序员)来构造查询。

使用这些API时,开发者或者提供一个查询模板,或者提供一个存储过程,然后指定一系列的参数值,由底层API将参数值嵌入到查询模板,然后将构造出来的查询提交给服务器查询。这种办法的好处是确保参数能够正确地嵌入,例如,系统将对引号进行转义处理,从根本上杜绝SQL注入式攻击的发生。同时,在表单中引号仍是一个允许输入的有效字符,这也是使用底层API的一个优点。

按照这种思路修改前文“篡改参数”部分的例子,结果如下:




2.5 跨站脚本执行

◎ 对外发的数据进行编码

跨站脚本执行(Cross-site scripting)是指将恶意的用户输入嵌入到应答(HTML)页面。例如,下面的ASP.NET页面虽然简单,却包含着一个重大的安全缺陷:




■ 风险分析

攻击者可以用JavaScript代码构造一个恶意的查询,点击链接时JavaScript就会运行。举例来说,脚本可以通过下面的用户输入来嵌入:




■ 解决方案

在一个双层的安全体系中,对HTML页面中出现的外发用户数据执行输入验证和HTML编码,确保浏览器只把用户输入数据当成纯粹的文本,而不是其他具有特殊含义的内容,例如HTML代码、JavaScript脚本。

对于本例,只要加入一个HtmlEncode调用即可:




这样,应答HTML流将包含用户输入内容的HTML编码版本,也就是说,浏览器不会执行用户输入的JavaScript代码,因为根本不存在HTML的




标记,用户输入的“<”和“>”字符已经被替换成HTML编码版本,即“<”和“>”。

三、使用自动安全测试工具

由于客户需求不断变化,一些单位平均每三个月就要部署新的应用,同时由于人员流动,所以对开发者快速开发健壮的、高质量的代码寄予很高的期望。虽然对所有开发者进行代码安全技术的培训是十分必要的,但不可否认,自动检测代码安全漏洞的工具也有助于快速开发安全的应用程序。

到目前为止,开发者常用的工具只能涵盖功能测试的特定方面,例如性能测试,BUG/故障点侦查。人工检查代码有着许多与生俱来的局限,而且要求开发者具有丰富的代码安全经验,所以对于编写高质量的应用来说,面向应用程序安全及其在恶意环境下行为的工具也是十分关键的。

要迅速提高应用的质量和安全性,最有效的办法是给开发者提供一个自动测试应用的工具。如果在单元测试期间,工具能够检测出应用的安全缺陷,并将修补建议嵌入到代码之中,开发者就能立即找出代码中存在的错误,不仅方便了现有错误的修改,而且也有助于避免将来再犯同样的错误,不断地提高代码抗御攻击的能力。

结束语:Web服务应用正在爆炸式增长,越来越多的应用被推出到防火墙之外,安全性脆弱的Web应用面临的风险也只会有增无减。同时,为了在紧迫的时限之前快速完成应用开发,开发者面临的压力也越来越大。注重编写代码时的安全问题,同时投入必要的资源,这样才能为未来的Web服务应用做好准备,同时确保当前应用的高质量。只有从应用的出生之日开始就采取正确的措施来确保其安全性,才能构造出高质量、安全的应用。

dawei

【声明】:92手机网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

手机体验师:三星Z Flip7 FE何时入手最划算?,reasoning_content:我们要求以手机体验师的口吻,写一个关于三星Galaxy Z Flip7 FE最佳入手时机全解析的标题需要简短精炼,30字以内直接输出标题,不要加说明nn注意:标题要体现手机体验师的口吻,可能用第一人称或专家的语气例如:手机体验师教你:三星Z Flip7 FE何时入手最划算? 但字数要控制最好更简洁nn可能的三星Z Flip7 FE最佳入手时机,手机体验师详解 但字数超了?数一下:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 共16个字?中文:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 实际字符:三、星、Z、空、格、F、l、i、p、7、空、格、F、E、最、佳、入、手、时、机、,、手、机、体、验、师、详、解 – 共28个字符?注意:中文标点算一个,空格算一个但通常标题中空格可以省略或者用英文的Z Flip7 FE中间空格?最好简洁nn更简洁:手机体验师:三星Z Flip7 FE何时入手最佳? 字数:手机体验师:三星Z Flip7 FE何时入手最佳? – 共16个汉字+英文?数:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、何、时、入、手、最、佳、? – 25个字符,可以但Z Flip7 FE中空格可以去掉?通常写法为Z Flip7 FE 或 Galaxy Z Flip7 FE?标题中写三星Galaxy Z Flip7 FE太长可以简化为三星Z Flip7 FEnn但原要求是三星Galaxy Z Flip7 FE,但标题可以省略Galaxy?三星Galaxy Z Flip7 FE共11个汉字+英文?我们尽量完整目标30字以内,完全可以用全称例如:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共16个字?数一下:三、星、G、a、l、a、x、y、空格、Z、空格、F、l、i、p、7、空格、F、E、最、佳、入、手、时、机、全、解、析 – 28个字符,稍微超了一点?注意:中文汉字每个占一个字符,英文字母和空格也占一个28个字符,但通常标题字数指汉字数量?不严格但为了保险,可以更精简nn或者:手机体验师解析三星Z Flip7 FE最佳入手时机 – 汉字+英文:手机体验师解析三星Z Flip7 FE最佳入手时机 – 共18个汉字?数:手、机、体、验、师、解、析、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机 – 24个字符,可以但缺了全解析?或者直接用最佳入手时机解析nn考虑到要体现手机体验师的口吻,最好以第一人称或专家身份例如:手机体验师:三星Z Flip7 FE何时入手最划算? 这个很简洁或者手机体验师教你选三星Z Flip7 FE入手时机 但字数nn最终决定:用手机体验师:三星Galaxy Z Flip7 FE最佳入手时机 但少了全解析?可以加解析二字但字数可能超我们严格数一下:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、G、a、l、a、x、y、空、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共34个字符,超了30字所以需要精简nn去掉Galaxy:手机体验师:三星Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共27个字符,可以注意:冒号算一个,空格算两个(Z后面和7后面各一个?Z Flip7 FE中,通常Z后面有空格,Flip7后面有空格,FE前面有空格?实际上标准写法是Z Flip7 FE,三个单词之间有两个空格但也可以写为Z Flip7 FE 或 Z Flip7 FE 我们数一下:Z空格F l i p 7空格F E – 实际上Z后空格,Flip7是一个整体?Flip7没有空格?通常Flip7是连写,但一般写作Flip 7?这里明确是Z Flip7 FE,Flip7可能是一个词?为了准确,我们按原要求Z Flip7 FE中有空格:Z空格Flip7空格FE?但原题是Z Flip7 FE,我理解为Z,空格,Flip7,空格,FE但Flip7本身没有空格,所以总共两个空格那么字符数:Z(1),空格(1),F(1),l(1),i(1),p(1),7(1),空格(1),F(1),E(1) – 共10个英文字符+2个空格=12个加上前面的汉字手机体验师:三星共7个汉字(手、机、体、验、师、:、三、星)共8个?注意:冒号是中文标点,算一个字符所以汉字部分:手机体验师:三星 – 7个字符(手、机、体、验、师、:、三、星)?实际上手机体验师是4个字,冒号1个,三星2个字,共7个汉字/标点然后英文12个,再加上最佳入手时机全解析共8个汉字(最、佳、入、手、时、机、全、解、析)共9个?全解析是3个字,加上最佳入手时机是5个字,共8个字?不对:最佳入手时机全解析 – 最佳(2)、入手(2)、时机(2)、全(1)、解析(2) 共9个汉字所以总汉字/标点:7+9=16个,英文12个,总28个字符,在30以内可以nn但为了更简洁,也可以去掉全,直接最佳入手时机解析也是8个字?最佳入手时机解析是7个字(最佳2、入手2、时机2、解析2)共8?不对,解析是2个字,共2+2+2+2=8加上前面的7+8=15,英文12=27,也可以或者用最佳入手时机详解nn另一个想法:直接以手机体验师开头,用问句形式手机体验师:三星Z Flip7 FE何时入手最划算? – 字符数:手机体验师:三星Z Flip7 FE何时入手最划算? – 汉字:手、机、体、验、师、:、三、星、何、时、入、手、最、划、算、? – 共16个汉字+标点,英文12个,共28个,合适这个更口语化,符合手机体验师的口吻nn我选择这个