• 关于

    过滤ascii控制字符

    的搜索结果

回答

通常,字符äåö没问题,因为浏览器和Web应用程序的tomcat / java使用的默认字符集为latin1即。“理解”这些字符的ISO-8859-1。 要使UTF-8在Java + Tomcat + Linux / Windows + Mysql下工作,需要满足以下条件: 配置Tomcat的server.xml 必须配置连接器使用UTF-8编码url(GET请求)参数: 在上面的示例中,关键部分是URIEncoding =“ UTF-8”。这可以保证Tomcat将所有传入的GET参数处理为UTF-8编码。结果,当用户将以下内容写入浏览器的地址栏时: https://localhost:8443/ID/Users?action=search&name=ж 字符ж被当作UTF-8处理,并被编码为%D0%B6(通常在到达服务器之前由浏览器访问)。 POST请求不受此影响。 CharsetFilter 然后是时候强制Java Web应用程序以UTF-8编码方式处理所有请求和响应了。这要求我们定义一个字符集过滤器,如下所示: package fi.foo.filters; import javax.servlet.*; import java.io.IOException; public class CharsetFilter implements Filter { private String encoding; public void init(FilterConfig config) throws ServletException { encoding = config.getInitParameter("requestEncoding"); if (encoding == null) encoding = "UTF-8"; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException { // Respect the client-specified character encoding // (see HTTP specification section 3.4.1) if (null == request.getCharacterEncoding()) { request.setCharacterEncoding(encoding); } // Set the default response content type and encoding response.setContentType("text/html; charset=UTF-8"); response.setCharacterEncoding("UTF-8"); next.doFilter(request, response); } public void destroy() { } } 此过滤器可确保如果浏览器未设置请求中使用的编码,则将其设置为UTF-8。 该过滤器完成的另一件事是设置默认响应编码,即。返回的html /所使用的编码。另一种方法是在应用程序的每个控制器中设置响应编码等。 该过滤器必须添加到web.xml或webapp的部署描述符中: CharsetFilter fi.foo.filters.CharsetFilter requestEncoding UTF-8 CharsetFilter /* 可以在tomcat Wiki(http://wiki.apache.org/tomcat/Tomcat/UTF-8)中找到有关创建此过滤器的说明。 JSP页面编码 在您的web.xml中,添加以下内容: *.jsp UTF-8 另外,Web应用程序的所有JSP页面都需要在其顶部具有以下内容: <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> 如果使用具有不同JSP片段的某种布局,则所有这些都需要。 HTML元标记 JSP页面编码告诉JVM以正确的编码处理JSP页面中的字符。然后是时候告诉浏览器html页面的编码方式了: 这是通过在webapp生成的每个xhtml页面顶部执行以下操作来完成的: ... JDBC连接 使用数据库时,必须定义该连接使用UTF-8编码。可以在context.xml或以下定义了JDBC连接的地方完成: MySQL数据库和表 使用的数据库必须使用UTF-8编码。这是通过使用以下内容创建数据库来实现的: CREATE DATABASE `ID_development` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci */; 然后,所有表也都必须使用UTF-8: CREATE TABLE `Users` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(30) collate utf8_swedish_ci default NULL PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=DYNAMIC; 关键部分是CHARSET = utf8。 MySQL服务器配置 还必须配置MySQL serveri。通常,这是在Windows中通过修改my.ini -file和在Linux中通过配置my.cnf -file来完成的。在这些文件中,应该定义所有连接到服务器的客户端都使用utf8作为默认字符集,并且服务器使用的默认字符集也是utf8。 [client] port=3306 default-character-set=utf8 [mysql] default-character-set=utf8 MySQL的程序和功能 这些还需要定义字符集。例如: DELIMITER $$ DROP FUNCTION IF EXISTS `pathToNode` $$ CREATE FUNCTION `pathToNode` (ryhma_id INT) RETURNS TEXT CHARACTER SET utf8 READS SQL DATA BEGIN DECLARE path VARCHAR(255) CHARACTER SET utf8; SET path = NULL; ... RETURN path; END $$ DELIMITER ; GET请求:latin1和UTF-8 如果并且在tomcat的server.xml中定义了GET请求参数以UTF-8编码时,以下GET请求将得到正确处理: https://localhost:8443/ID/Users?action=search&name=Petteri https://localhost:8443/ID/Users?action=search&name=ж 由于latin1和UTF-8均以相同的方式编码ASCII字符,因此正确处理了字符串“ Petteri”。 拉丁语1完全不了解西里尔字母ж。由于指示Tomcat将请求参数处理为UTF-8,因此它将该字符正确编码为%D0%B6。 如果并且当指示浏览器读取UTF-8编码的页面(带有请求标头和html meta-tag)时,至少Firefox 2/3和此期间的其他浏览器都将字符本身编码为%D0%B6。 最终结果是,找到了所有名称为“ Petteri”的用户,还找到了所有名称为“ж”的用户。 但是äåö呢? HTTP规范定义默认情况下,URL编码为latin1。这导致firefox2,firefox3等对以下内容进行编码 https://localhost:8443/ID/Users?action=search&name=*Päivi* 进入编码版本 https://localhost:8443/ID/Users?action=search&name=*P%E4ivi* 在latin1中,字符ä编码为%E4。即使页面/请求/所有内容都定义为使用UTF-8。ä的UTF-8编码版本为%C3%A4 结果是,由于某些字符在latin1中编码,而另一些字符在UTF-8中编码,因此webapp完全不可能正确地处理GET请求中的请求参数。 注意:如果页面被定义为UTF-8,则POST请求确实可以工作,因为浏览器完全以UTF-8格式编码来自表单的所有请求参数。 读物 非常感谢以下作者为我的问题提供了答案: http://tagunov.tripod.com/i18n/i18n.html http://wiki.apache.org/tomcat/Tomcat/UTF-8 http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/ http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-tomcat-jsp-etc.html http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-for-mysql-tomcat.html http://jeppesn.dk/utf-8.html http://www.nabble.com/request-parameters-mishandle-utf-8-encoding-td18720039.html http://www.utoronto.ca/webdocs/HTMLdocs/NewHTML/iso_table.html http://www.utf8-chartable.de/ 重要的提示 mysql支持使用3字节UTF-8字符的基本多语言平面。如果您需要超出此范围(某些字母需要超过3个字节的UTF-8字节),则需要使用一种VARBINARY列类型的样式或使用utf8mb4字符集(这需要MySQL 5.5.3或更高版本)。请注意,使用utf8MySQL中的字符集无法100%地工作。 Tomcat与Apache 还有一件事,如果您使用的是Apache + Tomcat + mod_JK连接器,则还需要进行以下更改: 将URIEncoding =“ UTF-8”添加到8009连接器的tomcat server.xml文件中,由mod_JK连接器使用。 转到你的apache文件夹即/etc/httpd/conf添加AddDefaultCharset utf-8在httpd.conf file。注意:首先检查它是否存在。如果存在,您可以使用此行对其进行更新。您也可以在底部添加此行。来源:stack overflow
保持可爱mmm 2020-05-10 17:04:59 0 浏览量 回答数 0

回答

除了自身的硬件条件外,还需要对你的服务器做出安全设置控制,用2003系统来说下具体安全设置如下: 1、服务器安全设置之--硬盘权限篇 这里着重谈需要的权限,也就是最终文件夹或硬盘需要的权限,可以防御各种木马入侵,提权攻击,跨站攻击等。本实例经过多次试验,安全性能很好,服务器基本没有被木马威胁的担忧了。 硬盘或文件夹: C:\ D:\ E:\ F:\ 类推 主要权限部分: Administrators 完全控制 无 该文件夹,子文件夹及文件 <不是继承的> CREATOR OWNER 完全控制 只有子文件夹及文件 <不是继承的> SYSTEM 完全控制 该文件夹,子文件夹及文件 <不是继承的> 其他权限部分: 如果安装了其他运行环境,比如PHP等,则根据PHP的环境功能要求来设置硬盘权限,一般是安装目录加上users读取运行权限就足够了,比如c:\php的话,就在根目录权限继承的情况下加上users读取运行权限,需要写入数据的比如tmp文件夹,则把users的写删权限加上,运行权限不要,然后把虚拟主机用户的读权限拒绝即可。如果是mysql的话,用一个独立用户运行MYSQL会更安全,下面会有介绍。如果是winwebmail,则最好建立独立的应用程序池和独立IIS用户,然后整个安装目录有users用户的读/运行/写/权限,IIS用户则相同,这个IIS用户就只用在winwebmail的WEB访问中,其他IIS站点切勿使用 硬盘设置需要根据你的实际需要来设置权限! 2、服务器安全设置之--系统服务篇(设置完毕需要重新启动) *除非特殊情况非开不可,下列系统服务要停止并禁用: 1、Alerter 2、Application Layer Gateway Service 3、 Background Intelligent Transfer Service 4、Computer Browser 5、Distributed File System 6、Help and Support 7、Messenger 8、NetMeeting Remote Desktop Sharing 9、Print Spooler 10、Remote Registry 11、Task Scheduler 12、TCP/IP NetBIOS Helper 13、Telnet 14、Workstation 以上是windows2003server标准服务当中需要停止的服务,作为IIS网络服务器,以上服务务必要停止,如果需要SSL证书服务,则设置方法不同。如果你装有虚拟主机系统,设置当然也不一样!更详细设置可以根据自己的需要找更详细的参考资料。 3、服务器安全设置之--组件安全设置篇 (非常重要!!!) A、卸载WScript.Shell 和 Shell.application 组件,将下面的代码保存为一个.BAT文件执行(分2000和2003系统) win2000 regsvr32/u C:\WINNT\System32\wshom.ocx del C:\WINNT\System32\wshom.ocx regsvr32/u C:\WINNT\system32\shell32.dll del C:\WINNT\system32\shell32.dll win2003 regsvr32/u C:\WINDOWS\System32\wshom.ocx del C:\WINDOWS\System32\wshom.ocx regsvr32/u C:\WINDOWS\system32\shell32.dll del C:\WINDOWS\system32\shell32.dll B、改名不安全组件,需要注意的是组件的名称和Clsid都要改,并且要改彻底了,不要照抄,要自己改 【开始→运行→regedit→回车】打开注册表编辑器 然后【编辑→查找→填写Shell.application→查找下一个】 用这个方法能找到两个注册表项: {13709620-C279-11CE-A49E-444553540000} 和 Shell.application 。 第一步:为了确保万无一失,把这两个注册表项导出来,保存为xxxx.reg 文件。 第二步:比如我们想做这样的更改 13709620-C279-11CE-A49E-444553540000 改名为 13709620-C279-11CE-A49E-444553540001 Shell.application 改名为 Shell.application_nohack 第三步:那么,就把刚才导出的.reg文件里的内容按上面的对应关系替换掉,然后把修改好的.reg文件导入到注册表中(双击即可),导入了改名后的注册表项之后,别忘记了删除原有的那两个项目。这里需要注意一点,Clsid中只能是十个数字和ABCDEF六个字母。 其实,只要把对应注册表项导出来备份,然后直接改键名就可以了。 WScript.Shell 和 Shell.application 组件是 脚本入侵过程中,提升权限的重要环节,这两个组件的卸载和修改对应注册键名,可以很大程度的提高虚拟主机的脚本安全性能,一般来说,ASP和php类脚本提升权限的功能是无法实现了,再加上一些系统服务、硬盘访问权限、端口过滤、本地安全策略的设置,虚拟主机因该说,安全性能有非常大的提高,黑客入侵的可能性是非常低了。注销了Shell组件之后,侵入者运行提升工具的可能性就很小了,但是prel等别的脚本语言也有shell能力,为防万一,还是设置一下为好。下面是另外一种设置,大同小异。 一、禁止使用FileSystemObject组件 FileSystemObject可以对文件进行常规操作,可以通过修改注册表,将此组件改名,来防止此类木马的危害。 HKEY_CLASSES_ROOT\Scripting.FileSystemObject\ 改名为其它的名字,如:改为 FileSystemObject_ChangeName 自己以后调用的时候使用这个就可以正常调用此组件了 也要将clsid值也改一下 HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID\项目的值 也可以将其删除,来防止此类木马的危害。 2000注销此组件命令:RegSrv32 /u C:\WINNT\SYSTEM\scrrun.dll 2003注销此组件命令:RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll 如何禁止Guest用户使用scrrun.dll来防止调用此组件? 使用这个命令:cacls C:\WINNT\system32\scrrun.dll /e /d guests 二、禁止使用WScript.Shell组件 WScript.Shell可以调用系统内核运行DOS基本命令 可以通过修改注册表,将此组件改名,来防止此类木马的危害。 HKEY_CLASSES_ROOT\WScript.Shell\及HKEY_CLASSES_ROOT\WScript.Shell.1\ 改名为其它的名字,如:改为WScript.Shell_ChangeName 或 WScript.Shell.1_ChangeName 自己以后调用的时候使用这个就可以正常调用此组件了 也要将clsid值也改一下 HKEY_CLASSES_ROOT\WScript.Shell\CLSID\项目的值 HKEY_CLASSES_ROOT\WScript.Shell.1\CLSID\项目的值 也可以将其删除,来防止此类木马的危害。 三、禁止使用Shell.Application组件 Shell.Application可以调用系统内核运行DOS基本命令 可以通过修改注册表,将此组件改名,来防止此类木马的危害。 HKEY_CLASSES_ROOT\Shell.Application\ 及 HKEY_CLASSES_ROOT\Shell.Application.1\ 改名为其它的名字,如:改为Shell.Application_ChangeName 或 Shell.Application.1_ChangeName 自己以后调用的时候使用这个就可以正常调用此组件了 也要将clsid值也改一下 HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值 HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值 也可以将其删除,来防止此类木马的危害。 禁止Guest用户使用shell32.dll来防止调用此组件。 2000使用命令:cacls C:\WINNT\system32\shell32.dll /e /d guests 2003使用命令:cacls C:\WINDOWS\system32\shell32.dll /e /d guests 注:操作均需要重新启动WEB服务后才会生效。 四、调用Cmd.exe 禁用Guests组用户调用cmd.exe 2000使用命令:cacls C:\WINNT\system32\Cmd.exe /e /d guests 2003使用命令:cacls C:\WINDOWS\system32\Cmd.exe /e /d guests 通过以上四步的设置基本可以防范目前比较流行的几种木马,但最有效的办法还是通过综合安全设置,将服务器、程序安全都达到一定标准,才可能将安全等级设置较高,防范更多非法入侵。 C、防止Serv-U权限提升 (适用于 Serv-U6.0 以前版本,之后可以直接设置密码) 先停掉Serv-U服务 用Ultraedit打开ServUDaemon.exe 查找 Ascii:LocalAdministrator 和 #l@$ak#.lk;0@P 修改成等长度的其它字符就可以了,ServUAdmin.exe也一样处理。 另外注意设置Serv-U所在的文件夹的权限,不要让IIS匿名用户有读取的权限,否则人家下走你修改过的文件,照样可以分析出你的管理员名和密码。 4、服务器安全设置之--IIS用户设置方法 不同站点使用不用的IIS用户。另外权限的设置要细致。 5、服务器安全设置之--服务器安全和性能配置 把下面文本保存为: windows2000-2003服务器安全和性能注册表自动配置文件.reg 运行即可。[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer] "NoRecentDocsMenu"=hex:01,00,00,00 "NoRecentDocsHistory"=hex:01,00,00,00 [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon] "DontDisplayLastUserName"="1" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "restrictanonymous"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\Parameters] "AutoShareServer"=dword:00000000 "AutoShareWks"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "EnableICMPRedirect"=dword:00000000 "KeepAliveTime"=dword:000927c0 "SynAttackProtect"=dword:00000002 "TcpMaxHalfOpen"=dword:000001f4 "TcpMaxHalfOpenRetried"=dword:00000190 "TcpMaxConnectResponseRetransmissions"=dword:00000001 "TcpMaxDataRetransmissions"=dword:00000003 "TCPMaxPortsExhausted"=dword:00000005 "DisableIPSourceRouting"=dword:00000002 "TcpTimedWaitDelay"=dword:0000001e "TcpNumConnections"=dword:00004e20 "EnablePMTUDiscovery"=dword:00000000 "NoNameReleaseOnDemand"=dword:00000001 "EnableDeadGWDetect"=dword:00000000 "PerformRouterDiscovery"=dword:00000000 "EnableICMPRedirects"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters] "BacklogIncrement"=dword:00000005 "MaxConnBackLog"=dword:000007d0 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters] "EnableDynamicBacklog"=dword:00000001 "MinimumDynamicBacklog"=dword:00000014 "MaximumDynamicBacklog"=dword:00007530 "DynamicBacklogGrowthDelta"=dword:0000000a 功能:可抵御DDOS攻击2-3万包,提高服务器TCP-IP整体安全性能(效果等于软件防火墙,节约了系统资源) 6、服务器安全设置之--IP安全策略 (仅仅列出需要屏蔽或阻止的端口或协议) 协议 IP协议端口 源地址 目标地址 描述 方式 ICMP -- -- -- ICMP 阻止 UDP 135 任何IP地址 我的IP地址 135-UDP 阻止 UDP 136 任何IP地址 我的IP地址 136-UDP 阻止 UDP 137 任何IP地址 我的IP地址 137-UDP 阻止 UDP 138 任何IP地址 我的IP地址 138-UDP 阻止 UDP 139 任何IP地址 我的IP地址 139-UDP 阻止 TCP 445 任何IP地址-从任意端口 我的IP地址-445 445-TCP 阻止 UDP 445 任何IP地址-从任意端口 我的IP地址-445 445-UDP 阻止 UDP 69 任何IP地址-从任意端口 我的IP地址-69 69-入 阻止 UDP 69 我的IP地址-69 任何IP地址-任意端口 69-出 阻止 TCP 4444 任何IP地址-从任意端口 我的IP地址-4444 4444-TCP 阻止 TCP 1026 我的IP地址-1026 任何IP地址-任意端口 灰鸽子-1026 阻止 TCP 1027 我的IP地址-1027 任何IP地址-任意端口 灰鸽子-1027 阻止 TCP 1028 我的IP地址-1028 任何IP地址-任意端口 灰鸽子-1028 阻止 UDP 1026 我的IP地址-1026 任何IP地址-任意端口 灰鸽子-1026 阻止 UDP 1027 我的IP地址-1027 任何IP地址-任意端口 灰鸽子-1027 阻止 UDP 1028 我的IP地址-1028 任何IP地址-任意端口 灰鸽子-1028 阻止 TCP 21 我的IP地址-从任意端口 任何IP地址-到21端口 阻止tftp出站 阻止 TCP 99 我的IP地址-99 任何IP地址-任意端口 阻止99shell 阻止 以上是IP安全策略里的设置,可以根据实际情况,增加或删除端口 7、服务器安全设置之--本地安全策略设置 安全策略自动更新命令:GPUpdate /force (应用组策略自动生效不需重新启动) 开始菜单—>管理工具—>本地安全策略 A、本地策略——>审核策略 审核策略更改 成功 失败 审核登录事件 成功 失败 审核对象访问 失败 审核过程跟踪 无审核 审核目录服务访问 失败 审核特权使用 失败 审核系统事件 成功 失败 审核账户登录事件 成功 失败 审核账户管理 成功 失败 B、本地策略——>用户权限分配 关闭系统:只有Administrators组、其它全部删除。 通过终端服务拒绝登陆:加入Guests、User组 通过终端服务允许登陆:只加入Administrators组,其他全部删除 C、本地策略——>安全选项 交互式登陆:不显示上次的用户名 启用 网络访问:不允许SAM帐户和共享的匿名枚举 启用 网络访问:不允许为网络身份验证储存凭证 启用 网络访问:可匿名访问的共享 全部删除 网络访问:可匿名访问的命 全部删除 网络访问:可远程访问的注册表路径 全部删除 网络访问:可远程访问的注册表路径和子路径 全部删除 帐户:重命名来宾帐户 重命名一个帐户 帐户:重命名系统管理员帐户 重命名一个帐户 还有很多设置!你可以多找找资料! 答案来源网络,供参考,希望对您有帮助
问问小秘 2019-12-02 03:00:07 0 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT