我正在为我在空闲时间工作的聊天应用程序编写JS,我需要根据用户提交的数据更改HTML标识符.这通常是概念上不稳定的东西,我甚至都不会尝试它,但这次我不认为自己有很多选择.我需要做的是转义HTML id以确保它不允许XSS或破坏HTML.
这是代码:
var user_id = escape(id)
var txt = '<div class="chut">'+
'<div class="log" id="chut_'+user_id+'"></div>'+
'<textarea id="chut_'+user_id+'_msg"></textarea>'+
'<label for="chut_'+user_id+'_to">To:</label>'+
'<input type="text" id="chut_'+user_id+'_to" value='+user_id+' readonly="readonly" />'+
'<input type="submit" id="chut_'+user_id+'_send" value="Message"/>'+
'</div>';
Run Code Online (Sandbox Code Playgroud)
逃避id避免上述任何问题的最佳方法是什么?正如你所看到的,现在我正在使用内置escape()函数,但我不确定它与其他替代品相比有多好.我主要习惯在输入文本节点之前清理输入,而不是id本身.
是否有一个角度JS命令将在文本上进行HTML转义?我正在处理一个自定义指令,并需要转义它生成的一些输出.
在内部,AngularJS sanitzer使用encodeEntities函数,但不暴露它.我知道我可以复制这个函数,但似乎应该有一个标准的方法来做到这一点.
用例:我有一个自定义指令,用于语言本地化.该指令使用数据文件中的键查找来查找语言文本.在某些情况下,允许此文本包含HTML,和/或该指令生成HTML以改进最终的可视格式.此外,该指令将Angular表达式作为参数,并将它们用作字符串中标记的替换.我需要对这些参数进行编码,因为它们可能不是HTML安全的.
例如,该指令被称为属性i18n-html='welcome_text_html,1+1,user.name'.该指令然后按照描述格式化字符串并用于element.html更新DOM节点.
我正在构建一个使用大量数据的富Web应用程序.当我建造它时,我发现我一遍又一遍地重复着自己.
这就是问题.我需要将隐藏的应用程序逻辑放入html元素中以表示客户端正在查看的数据.
这是我前段时间发现的解决方案:
<a href="bla" data-itemId="1" .... more data.
Run Code Online (Sandbox Code Playgroud)
这种方法存在两个问题.
我搜索了一个解决方案,但没有找到任何东西.我也去了facebook,打开了firebug,发现了这个:
{"actor":"19034719952","target_fbid":"454811929952","target_profile_id":"19034719952","type_id":"7","source":"1","assoc_obj_id":"","source_app_id":"","extra_story_params":[],"content_timestamp":"1324385453","check_hash":"9eabc3553e8a2fb6"}
Run Code Online (Sandbox Code Playgroud)
这个json在一个input[type=hidden]元素里面.
我试着做同样的事情 json_encode();
<input type="hidden" name="track" value="{"_id":{"$id":"4eee908f615c2102e9010000"},"link":"george-wassouf-flag-of-my-heart-longing","file":"\/m\/tracks\/t.4eee908daca2a3.49941874.mp3","lyrics":null,"freezed":false,"hits":0,"images":{"large":"\/assets\/static\/default.track.large.jpg","thumb":"\/assets\/static\/default.track.thumb.jpg","icon":"\/assets\/static\/default.track.icon.jpg"},"duration":"300","created":{"sec":1324257423,"usec":78000},"albums":[{"_id":{"$id":"4eee8d63615c21f6e7000000"},"names":{"ar":"\u0643\u0644\u0627\u0645\u0643 \u064a\u0627 \u062d\u0628\u064a\u0628\u064a","en":"Kalamak ya Habibi"},"link":"george-wassouf-kalamak-ya-habibi","images":{"original":"\/m\/pics\/albums\/o.4eee8d612c3183.11879972.jpg","poster":"\/m\/pics\/albums\/p.4eee8d63967072.02645896.jpg","large":"\/m\/pics\/albums\/l.4eee8d63a89111.20372767.jpg","small":"\/m\/pics\/albums\/s.4eee8d63b18927.47242533.jpg","thumb":"\/m\/pics\/albums\/t.4eee8d63b7f1f4.11879932.jpg","icon":"\/m\/pics\/albums\/i.4eee8d63bf1304.59902753.jpg"}},{"_id":{"$id":"4eee8d63615c21f6e7000000"},"name":"Kalamak ya Habibi","link":"george-wassouf-kalamak-ya-habibi"}],"name":"Flag of my heart longing","title":"Flag of my heart longing","mp3":"\/m\/tracks\/t.4eee908daca2a3.49941874.mp3","poster":"\/m\/pics\/artists\/p.4eee85cd7ed579.65275366.jpg","artists":[{"_id":{"$id":"4eee85cd615c21ece6000000"},"name":"George Wassouf","link":"george-wassouf"}]}" />
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试获得价值时,我得到了这个{.
我已经尝试了所有常量JSON_HEX_TAG,但没有发现任何类型的问题.
如何正确地将json放入html然后用jquery/javascript获取它?
我遇到了用户输入数据的问题,如果有单引号,脚本就会出错.
处理用户输入的单引号的最佳方法是什么,因此它不会干扰jquery/javascript?
更新:
我通过ajax将它发送到数据库.这是json ajax调用的数据参数.
data: "{str_" + sectionName + " :'" + UpdateText + "',EntityID: '" + EntityID + "' }",
更新文本是可以包含引号的字符串.
我花了一些时间寻找最好的方法来逃避html字符串并找到一些讨论:讨论1 讨论2.它引导我替换所有功能.然后我做了性能测试,并试图找到实现类似速度的解决方案,但没有成功:(
这是我的最终测试用例集.我在网上找到它并随着我的尝试扩展(底部有4个案例)但仍无法达到replaceAll()性能.
什么是秘密女巫使replaceAll()解决方案如此迅速?
映入眼帘!
代码片段:
String.prototype.replaceAll = function(str1, str2, ignore)
{
return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$"):str2);
};
Run Code Online (Sandbox Code Playgroud)
qwerty的学分
迄今为止最快的案例:
html.replaceAll('&', '&').replaceAll('"', '"').replaceAll("'", ''').replaceAll('<', '<').replaceAll('>', '>');
Run Code Online (Sandbox Code Playgroud) 我正在使用jquery数据表,它使用该sAjaxSource属性动态加载一些JSON .一切都很好,除了加载的内容被视为潜在的标记,所以如果单元格中的文本包含<或某些东西,事情会变得奇怪.
在将数据加载到表中之前,如何让数据表转义我的数据?我不想做服务器端,因为服务器不应该关心客户端将如何处理数据.
我有一个jquery AJAX函数,它检索一些HTML标记并在页面上显示它.我还想显示返回此HTML的html代码.我四处寻找解决方案,但没找到任何解决方案.有人可以请帮助.非常感谢
$.post('get_news.php', $("#gifForm").serialize(), function(data) {
//Show HTML
$('#output').html(data);
//Show HTML code
$('#output_code').html(data);
});
Run Code Online (Sandbox Code Playgroud) 例如,如果我想向用户显示x < 3HTML中的字符串,我需要替换该<字符<.是否有预先构建的函数可以在JavaScript或jQuery中执行此操作,将任何文本字符串转换为相应的HTML?
我最近正在阅读一本 JavaScript 书,发现使用 innerHTML 传递纯文本会带来安全风险,所以我想知道使用html()jQuery 方法是否会带来同样的风险?我试图研究它,但我找不到任何东西。
例如:
$("#saveContact").html("Save"); //change text to Save
var saveContact = document.getElementById("saveContact");
saveContact.innerHTML = "Save"; //change text to Save
Run Code Online (Sandbox Code Playgroud)
据我所知,它们做同样的事情,但它们是否都带来了相同的安全风险,即有人能够注入一些 JavaScript 并执行它?
我对安全不是很了解,所以如果有任何不正确或解释不正确的地方,我提前道歉。
我有以下代码:
var name = "Joe O'Neal";
var row= [];
row.push(
"<td><input type='hidden' name='milestones[" + id + "].Name'
value='" + name + "' class='currentRowName' />
<span class='currentRowNameText'>" + name + "</span></td>")
Run Code Online (Sandbox Code Playgroud)
但问题是我有一个名称变量中有撇号的情况,所以它导致了这个问题:
value='" + name + "'
Run Code Online (Sandbox Code Playgroud)
写这个的正确方法是什么,以避免与撇号发生冲突?在C#中,我会做类似的事情
value=\"" + name + "\"
Run Code Online (Sandbox Code Playgroud)
但这似乎不适用于JavaScript
javascript ×9
jquery ×6
html ×4
escaping ×2
angularjs ×1
apostrophe ×1
datatables ×1
json ×1
performance ×1
php ×1
security ×1
string ×1
xss ×1