在显示的时候对非法字符进行转义
如果项目还处在起步阶段,建议使用第二种,直接使用jstl的<c:out>标签即可解决非法字符的问题。当然,对于Javascript还需要自己处理一下,写一个方法,在解析从服务器端获取的数据时执行以下escapeHTML()即可。
附:Javascript方法:
StringprototypeescapeHTML = function () {
return thisreplace(/&/g, ‘&’)replace(/>/g, ‘>’)replace(/</g, ‘<’)replace(/”/g, ‘"’);}
如果项目已经开发完成了,又不想大批量改动页面的话,可以采用第一种方法,此时需要借助Spring MVC的@InitBinder以及orgapachecommonslangPropertyEditorSupport、orgapachecommonslangStringEscapeUtils
public class StringEscapeEditor extends PropertyEditorSupport {
private boolean escapeHTML;
private boolean escapeJavaScript;
private boolean escapeSQL;
public StringEscapeEditor() { super(); }
public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {super();thisescapeHTML = escapeHTML;
thisescapeJavaScript = escapeJavaScript;
thisescapeSQL = escapeSQL;}@Overridepublic void setAsText(String text) {
if (text == null) {
setValue(null);} else {String value = text;
if (escapeHTML) { value = StringEscapeUtilsescapeHtml(value); }
if (escapeJavaScript) { value = StringEscapeUtilsescapeJavaScript(value); }
if (escapeSQL) { value = StringEscapeUtilsescapeSql(value); } setValue(value); }}@Overridepublic String getAsText() { Object value = getValue(); return value != null valuetoString() : “”; }}
在上面我们做了一个EscapeEditor,下面还要将这个Editor和Spring的Controller绑定,使服务器端接收到数据之后能够自动转移特殊字符。
下面我们在@Controller中注册@InitBinder
@InitBinder
public void initBinder(WebDataBinder binder) {
这个方法可以直接放到abstract Controller类中,这样子每个Controller实例都能够拥有该方法。这是以前写的两个防注入函数,希望帮到你! ''' <summary>
''' 过滤特殊字符,以防止脚本攻击(如:[ ' ; " : + % { } ])
''' </summary>
''' <param name="anychar">字符串表达式</param>
''' <returns>过滤后的字符串</returns>
''' <remarks>只用于将字符串存入数据库的时候使用</remarks>
Public Function A_Incode(ByVal anychar As String) As String
'过滤SQL注入"
anychar = anycharReplace("""", "ぁ")
'过滤SQL注入'
anychar = anycharReplace("'", "ぃ")
'过滤SQL注入[
anychar = anycharReplace("[", "ぅ")
'过滤SQL注入]
anychar = anycharReplace("]", "ぇ")
'过滤SQL注入%
anychar = anycharReplace("%", "ぉ")
'过滤SQL注入:
anychar = anycharReplace(":", "か")
'过滤SQL注入;
anychar = anycharReplace(";", "き")
'过滤SQL注入+
anychar = anycharReplace("+", "く")
'过滤SQL注入{
anychar = anycharReplace("{", "け")
'过滤SQL注入}
anychar = anycharReplace("}", "こ")
Return (anychar)
End Function
''' <summary>
''' 还原过滤的特殊字符,已显示正确的内容(如:[ ' ; " : + % { } ])
''' </summary>
''' <param name="anychar">字符串表达式</param>
''' <returns>过滤后的字符串</returns>
''' <remarks>只用于将字符串存入数据库的时候使用</remarks>
Public Function A_Outcode(ByVal anychar As String) As String
'过滤SQL注入"
anychar = anycharReplace("ぁ", """")
'过滤SQL注入'
anychar = anycharReplace("ぃ", "'")
'过滤SQL注入[
anychar = anycharReplace("ぅ", "[")
'过滤SQL注入]
anychar = anycharReplace("ぇ", "]")
'过滤SQL注入%
anychar = anycharReplace("ぉ", "%")
'过滤SQL注入:
anychar = anycharReplace("か", ":")
'过滤SQL注入;
anychar = anycharReplace("き", ";")
'过滤SQL注入+
anychar = anycharReplace("く", "+")
'过滤SQL注入{
anychar = anycharReplace("け", "{")
'过滤SQL注入}
anychar = anycharReplace("こ", "}")
Return (anychar)
End Function
选择安全可靠的网络服务商,作为国内顶级互联网IDC服务商,新网和万网是上上之选,占全国市场份额的70%。目前市场上涌现出大批廉价的服务商,部分用户为了追求廉价,使用这些产 品,结果稳定性、安全性、维护质量等问题不断涌现。人们经常错误地认为,黑客都是以网站作为入口进行入侵的,其实这只是一方面,因服务器安全等级引起的网 站问题不胜枚举。一旦服务器遭到入侵,势必波及该服务器中的所有网站。
选择技术精湛的建站公司,目前,建站公司到处都是,甚至形成了恶性竞争,在某广告论坛里,A公司说500元可建设企业网站,B公司放言200元企业网站包干。真的有这样的好事吗? 答案是否定的,但是,为了达到超低价建站的目的,他们往往借用各种手段,以缩短建站周期。例如自助建站,花几分钟填写好简单资料就可以生成一个企业网站。 例如模板抄袭,借用网络上的共享模板或直接复制其它企业的网站,最后遭到第三方的版权投诉。正规的建站公司从来不会以追求廉价建站获取竞争力而放弃建站原 则,他们有规范的网站建设周期流程,合理安排设计师和程序员进行设计与开发,既要考虑网站整体美观,也要考虑网站功能使用的便捷,更要考虑网站后期的可维护性及网站的安全性。
数据库加密, 纵观互联网,90%以上的网站都使用了动态网站开发技术,如ASP,PHP,JSP等等,大大提高了网站的可维护性、可 *** 作性,但是由于动态网站开发技术需要特定的程序处理,而网络程序员往在编写这些程序的时候留下了一些漏洞,而网站建设最后一步“整站测试”又没有检查出来,因此给黑客们提供了可乘之机。
以ASP+ACCESS为例,数据库尽量不要放在常用数据库目录中,例如admin/data目录,这样很容易被黑客猜到,建议使用方法:更改 数据库目录如admin/yiq_data。一些服务器并没有屏蔽mdb文件下载功能,倘若数据库地址被猜出,就可以直接下载数据库,导致信息泄漏。因 此,ACCESS数据库应当进行后缀伪装,例如改为#yiqnet-data#asp就可以防止些下载。
管理密码加密及管理帐户保密, 一般,未经加密的密码都是直接的表现形式,例如admin,这样的形式显然容易被破解。温馨提醒:设置密码应当是英文数字的混合组合,且长度大于8 位,这样设置大大增强了网站防破解性能。但是,仍然不够理想,因为它只能提高破解难度,而不能完全杜绝。因此,采用MD5加密势在必行,这是一个非常复 杂的加密算法,而且不可逆,例如admin通过MD5加密后在数据库中存储表现形式为(16位)7a57a5a743894a0e。设置密码时,请不要使 用生日,英文名字,名字拼音等众所周知的字串,并且,妥善保管好设置的密码,注意保密。
5、 防止代码注入攻击
注入攻击是指利用网站程序设计的漏洞,通过特定的字串使SQL变相运行,从而暴露数据库的相关信息,获取管理帐号和密码,修改网站设定,上传后门程序,这 时入侵者可以在受害站点做任何想做的事情。加入防注入代码就可以解决这一问题,这是网站程序员应该做的事情。
数据库本身。不推荐的防御sql注入的方式是数据库本身。无论使用什么数据库,不做任何防护,都会有被sql注入的危险。如果对客户端和服务器端进行相应设置便可以起到防止sql注入的作用。比如:对用户数据进行过滤(a选项)、对数据库用户访问权限以及对信息加密(b选项、c选项)等。另外在编程时避免程序漏洞也可防止一部分sql注入。sql注入的一部分功能就是为了窃取数据库登录信息等,另外可利用登录信息进行sql语句拼接达到注入的目的,所以对账号加密处理对防止sql注入起到了一定的作用。SQL注入漏洞攻击的防范方法有很多种,现阶段总结起来有以下方法:(1)数据有效性校验。如果一个输入框只可能包括数字,那么要通过校验确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符,最好的方法是增加字符复杂度自动验证功能。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。另外限制表单数据输入和查询字符串输入的长度也是一个好方法。如果用户的登录名最多只有10个字符,那么不要认可表单中输入10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。
(2)封装数据信息。对客户端提交的数据进行封装,不要将数据直接存入cookie中,方法就是在编程的代码中,插入session、if、try、else,这样可以有效地防止攻击者获取cookie中的重要信息。
(3)去除代码中的敏感信息。将在代码中存在的用户名、口令信息等敏感字段删除,替换成输入框。
SQL=" select from users where username = ’admin’and password= ’1234567’ "
如:这样显然会暴露管理员的用户名、口令信息。可以将其修改成:
SQL= " select from users where username='" +TxtuserText + "' and userpwd='" + TextpwdText + "'"
这样就安全了很多,入侵者也是不会轻易的就获取到用户名、口令信息。
(4)替换或删除单引号。使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程度上预防SQL注入漏洞攻击,单引号时常会无法约束插入数据的Value,可能给予输入者不必要的权限。用双引号替换掉单引号可以使大部分SQL注入漏洞攻击失败。 如:
“select from users where username='" + admin + "' and userpwd='" + 1234567+ "'”
显然会得到与
“select from users where username='admin' and password= '1234567'”
相同的结果。
(5)指定错误返回页面。攻击者有时从客户端尝试提交有害代码和攻击字符串,根据Web Service给出的错误提示信息来收集程序及服务器的信息,从而获取想得到的资料。应在Web Service中指定一个不包含任何信息的错误提示页面。
(6)限制SQL字符串连接的配置文件。使用SQL变量,因为变量不是可以执行的脚本,即在Web页面中将连接数据库的SQL字符串替换成指定的Value,然后将Webconfig文件进行加密,拒绝访问。
(7)设置Web目录的访问权限。将虚拟站点的文件目录禁止游客用户(如:Guest用户等)访问,将User用户权限修改成只读权限,切勿将管理权限的用户添加到访问列表。
(8)最小服务原则。Web服务器应以最小权限进行配置,只提供Web服务,这样可以有效地阻止系统的危险命令,如ftp、cmd、vbscript等。
(9)鉴别信息加密存储。将保存在数据库users表中的用户名、口令信息以密文形式保存,也可以对users表进行加密处理,这样可以大大增加对鉴别信息访问的安全级别。
(10)用户权限分离。应尽可能的禁止或删除数据库中sa权限用户的访问,对不同的数据库划分不同的用户权限,这样不同的用户只能对授权给自己的数据库执行查询、插入、更新、删除 *** 作,就可以防止不同用户对非授权的数据库进行访问。
网站被攻击无法访问怎么办?服务器一直被攻击怎么办?如何才能防范服务器被攻击?
常见的攻击有两种一种是CC一个是DDOS
如果是DDOS必须要机房有硬防才可以防御的,这个必须需要带宽充足才可以解决的,同时CDN进行分流和清洗等
如果是CC机房技术会根据攻击的类型及时调整策略,CDN的服务在策略上可以先过一层。很有效的针对CC攻击。
防范服务器被攻击:
1、首先服务器一定要把administrator禁用;
2、系统升级、打 *** 作系统补丁,尤其是IIS60补丁、SQLSP3a补丁,
甚至IE60补丁也要打。同时及时跟踪最新漏洞补丁;
3、启动系统自带的Internet连接防火墙,在设置服务选项中勾选Web服务器;
4、禁止响应ICMP路由通告报文;
5、禁用服务里的Workstation;
6、阻止IUSR用户提升权限;
7、防止SQL注入。
当然若是黑客或者对头要死盯着你打,那也是一件很要命的事情,攻击方要耗成本,防御方也需要花费不少的费用来解决防御的问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)