网站都被注入js,被iframe之类的

本文介绍了一套全面的方案来解决网站遭受JS注入的问题,包括服务器安全配置、使用防病毒软件保护文件、清理数据库中的恶意代码、设置触发器防止非法输入、采用参数化SQL避免SQL注入以及对URL参数进行加密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看到很多人的网站都被注入js,被iframe之类的。非常多。

本人曾接手过一个比较大的网站,被人家入侵了,要我收拾残局。。

1.首先我会检查一下服务器配置,重新配置一次服务器安全,可以参考
http://hi.baidu.com/zzxap/blog/item/18180000ff921516738b6564.html

2.其次,用麦咖啡自定义策略,即使网站程序有漏洞,别人也很难在文件上写入代码了。
参考自定义策略,有了这个策略,再烂的程序,你也无法写入我的文件
http://hi.baidu.com/zzxap/blog/item/efe093a7e0f2c190d04358ef.html

3.可以用网络超级巡警删除被注入的JS代码。
参考
http://hi.baidu.com/anlish/blog/item/ba45bb18eac77e0534fa4134.html

4.如何批量删除数据库中被注入的代码?
在数据库查询分析器运行这段代码即可

SQL code
DECLARE @fieldtype sysname SET @fieldtype='varchar' --删除处理 DECLARE hCForEach CURSOR GLOBAL FOR SELECT N'update '+QUOTENAME(o.name) +N' set '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''<script_src=http://ucmal.com/0.js> </script>'','''')' FROM sysobjects o,syscolumns c,systypes t WHERE o.id=c.id AND OBJECTPROPERTY(o.id,N'IsUserTable')=1 AND c.xusertype=t.xusertype AND t.name=@fieldtype EXEC sp_MSforeach_Worker @command1=N'?'



5.创建一个触发器,只要有 </script>就不给插入,对性能会有点影响

SQL code
create trigger tr_table_insertupdate on tablename for insert,update as if exists ( select 1 from inserted where data like '%</script>%' ) begin RAISERROR ('不能修改或者添加',16,1); ROLLBACK TRANSACTION end go



6.最重要的还是程序的写法,用参数化SQL或存储过程
例如

C# code
protected void cmdok_Click(object sender, EventArgs e) { //添加信息 StringBuilder sql = new StringBuilder( " insert into m_phone ( pid,PhoneName,num,price,phonetype,onSellTime,color,weight,Video,Camera,phoneSize,phoneSystem,Memorysize,PhoneDesc,Standbytime,ScreenSize,Frequency,InputMethod,Soundrecord,gps,fm,mp3,email,Infrared,game,clock,Calendar,Calculator,Bluetooth) "); sql.Append(" values (@pid,@TextPhoneName,@Textnum,@Textprice,@Dropphonetype2,@TextonSellTime,@Textcolor,@Textweight "); ................. SqlParameter[] paras = { new SqlParameter("@pid", SqlDbType.Int, 4) , new SqlParameter("@TextPhoneName", SqlDbType.NVarChar, 50) , new SqlParameter("@Textnum", SqlDbType.Int, 4) , new SqlParameter("@Textprice", SqlDbType.Int, 4) , new SqlParameter("@Dropphonetype2", SqlDbType.VarChar, 20) , new SqlParameter("@TextonSellTime", SqlDbType.DateTime, 8) , new SqlParameter("@Textcolor", SqlDbType.VarChar, 20) , new SqlParameter("@Textweight", SqlDbType.NVarChar, 50) , ........... }; string[] stra = {Dropphonetype.SelectedValue,TextPhoneName.Text , Textnum.Text, Textprice.Text, Dropphonetype2.SelectedValue, TextonSellTime.Text, Textcolor.Text, Textweight.Text, .............}; int a=stra.Length; int j; for ( j = 0; j < a; j++) { paras[j].Value = stra[j]; } int strpid = 0; string sqla = sql.ToString(); try { SqlHelper.ExcuteNonQurey(sqla, CommandType.Text, paras);//执行添加数据 strpid = Convert.ToInt32(SqlHelper.ExcuteSclare(sqla, CommandType.Text, paras)); //获取刚才插入的id号 } catch (SqlException ex) { cmdreturn.Text = ex.Message.ToString(); } cmdreturn.Text = strpid.ToString(); 。。。。。。。。。



7.通过URL传递的参数要用加密解密

C# code
传输 string szTmp = "safdsfdsafdsfytrsd"; szTmp = Server.UrlEncode(szTmp); 接收 STRING STRA=Server.UrlDecode(request.querystring(szTmp));



8.把要使用的参数处理一下单引号,再放到SQL里面 
  例如 string stra=aa.replace("'","''")

  用参数化SQL可以不用处理单引号
  指定参数类型和过滤掉单引号,就可以杜绝99.9%入侵了


另外说一句:网上那些被人奉如圣经的过滤 update insert  等关键字的程序是用处不大的  upupdatedate 过滤掉 update还是update
还会造成不必要的麻烦

<think>好的,我现在需要帮助用户了解如何使用JavaScript动态设置iframe的只读属性。用户的问题是关于如何通过JavaScript动态地让iframe进入只读模式。首先,我需要理解用户的具体需求。他们可能有一个包含iframe的页面,想要根据某些条件或用户操作,让iframe中的内容变为只读,防止用户编辑。 首先,我需要确认iframe的内容是什么类型的。通常,iframe可能嵌入的是另一个HTML页面,或者是富文本编辑器之类的。如果iframe的内容是另一个文档,比如一个可编辑的页面,那么设置只读可能需要操作iframe内部的DOM元素。但需要注意的是,由于同源策略的限制,如果iframe的内容来自不同源,JavaScript可能无法直接访问其内部文档。 接下来,我需要考虑如何让iframe的内容变为只读。可能的思路包括: 1. **设置iframe的contentDocument属性**:如果同源的话,可以直接通过contentDocument访问内部文档,然后修改其元素的属性,比如将input、textarea等设置为readonly或disabled。 2. **使用designMode属性**:如果将iframe的designMode设置为"on",可以让整个文档进入可编辑状态,但反过来设置为"off"可能可以禁止编辑。不过这可能只适用于特定情况,比如富文本编辑器。 3. **sandbox属性**:HTML5的sandbox属性可以用来限制iframe的行为,包括禁止脚本执行、表单提交等。添加sandbox属性并排除allow-scripts和allow-forms等权限,可能达到只读的效果。不过这种方法可能过于严格,影响其他功能。 4. **动态修改iframe的srcdoc或src**:如果内容是通过srcdoc嵌入的,可以动态生成只读的内容并重新加载。或者通过修改src指向一个只读版本的页面。 然后,我需要验证这些方法的可行性。例如,如果iframe是同源的,可以通过以下代码: ```javascript var iframe = document.getElementById('myIframe'); var innerDoc = iframe.contentDocument || iframe.contentWindow.document; innerDoc.body.contentEditable = false; // 或者遍历所有输入元素设置readonly var inputs = innerDoc.querySelectorAll('input, textarea'); inputs.forEach(function(input) { input.readOnly = true; }); ``` 但如果跨域的话,这会导致权限错误,无法访问contentDocument。这时候可能需要其他方法,比如sandbox属性。例如: ```javascript iframe.sandbox = 'allow-same-origin'; // 限制某些权限 ``` 但需要测试具体哪些权限组合能实现只读。 另外,可能还需要考虑浏览器兼容性,比如sandbox属性在旧版本浏览器中的支持情况。此外,某些方法可能只能部分限制用户的编辑能力,需要综合使用多种手段。 用户可能需要具体的代码示例,因此我应该提供几种可能的解决方案,并说明它们的适用场景和限制。比如,针对同源和跨域的不同情况,分别给出方法。同时提醒用户注意跨域问题,因为这是常见的障碍。 总结可能的步骤: 1. 同源情况下,直接操作iframe内部元素,设置readonly或disabled属性。 2. 使用sandbox属性限制iframe的行为。 3. 动态生成只读内容并重新加载iframe。 4. 对于富文本编辑器,可能需要调用其API设置只读模式。 需要检查这些方法的正确性,比如sandbox属性的正确用法,以及如何正确访问iframe的内部文档。同时,可能需要引用相关文档或资源,如MDN关于sandbox属性的说明,或者iframe contentDocument的访问方式。 最后,应生成相关问题,帮助用户进一步了解相关主题,比如处理跨域iframe的交互,或者富文本编辑器的只读设置方法。</think>### 如何使用JavaScript动态设置iframe的只读属性? #### 方法1:通过`contentDocument`操作同源iframe内容 若iframe与父页面**同源**,可直接操作其内部元素: ```javascript const iframe = document.getElementById("myIframe"); const innerDoc = iframe.contentDocument || iframe.contentWindow.document; // 禁用所有输入元素 innerDoc.querySelectorAll("input, textarea, select").forEach(element => { element.readOnly = true; element.disabled = true; }); // 禁止内容编辑 innerDoc.body.contentEditable = false; ``` *注意:跨域访问`contentDocument`会触发安全错误[^1]。* --- #### 方法2:使用HTML5 `sandbox`属性 通过设置`iframe.sandbox`属性限制交互(支持跨域场景): ```javascript const iframe = document.getElementById("myIframe"); // 移除所有权限,仅保留基础功能 iframe.sandbox = "allow-same-origin"; // 可选:允许同源资源加载 ``` `sandbox`可配置参数: - `allow-forms`: 禁止表单提交时移除此项 - `allow-scripts`: 禁止脚本执行时移除此项 - `allow-modals`: 禁止弹窗时移除此项 --- #### 方法3:动态重载只读内容 若iframe内容由父页面控制,可注入只读HTML: ```javascript iframe.srcdoc = ` <!DOCTYPE html> <html> <body style="pointer-events: none;"> <!-- 禁用所有交互 --> ${originalHTMLContent} </body> </html> `; ``` --- #### 方法4:针对富文本编辑器的特殊处理 若iframe包含编辑器(如TinyMCE): ```javascript const editor = iframe.contentWindow.tinymce.get(0); editor.setMode('readonly'); // 调用编辑器API ``` --- ### 关键注意事项 1. **跨域限制**:非同源iframe无法直接操作内部元素 2. **沙盒兼容性**:`sandbox`属性需IE10+支持[^2] 3. **样式覆盖**:通过CSS禁用交互: ```css iframe { pointer-events: none; /* 禁止鼠标事件 */ } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值