我正在使用node.js和express4
在我的应用中,用户可以撰写帖子并为其提供标题。我会为每个帖子生成一个唯一的ID。
然后可以通过网址访问帖子:域名/帖子/帖子ID /帖子标题 服务器端,在解析url后,我只使用帖子的ID来正确查询我的数据库。 我从不使用网址中帖子的标题,因为我从我的数据库中安全地获取了它。
基本上,网址域/帖子/ A-valid-ID-of-a-post / ANYTHING 指向帖子的页面。
我的问题是:这有危险吗?一些攻击者可以利用这个吗? 如果是的话,我该如何保护自己?
注意: 我受到html注入保护,所以我的问题只是关于URL。
答案 0 :(得分:1)
你可以使用它,事实上我已经看过许多网站/论坛和使用这种方法的stackoverflow本身,例如查看网页的当前网址:
stackoverflow.com/questions/25763180/is-it-dangerous-to-display-user-input-in-url
这不是那么危险,请记住它是未经过输入并相应地对待它 - 一种潜在的输入攻击(实际上,总是这样做!)
答案 1 :(得分:0)
如果您实施了一些基本的安全预防措施,那将是安全的。
如果您的帖子ID是数字值,您只需检查该值是否为有效的正数。如果是,请继续,否则,返回错误或显示404
页。
如果您的帖子ID是字符串值,那么如果您的存储是RDBMS,则可能会注入SQL。在这种情况下,底层DBMS模块应提供转义字符串值的函数。例如,node-cubrid是CUBRID数据库的节点模块,具有_escapeString()辅助函数。
一旦您实施了这些基本检查和清洁工作,将帖子ID放入网址就可以了。
答案 2 :(得分:0)
这是安全的,但您应该考虑percent encoding字符串。
某些字符对浏览器有特殊含义,例如#
字符,用于查找锚标记以进行滚动(格式为<a name="foo">
),也可用作JavaScript window.location.hash
财产。根据您的站点及其JavaScript代码以及是否从此属性读取数据,攻击者可能会发起DOM based XSS攻击。允许URL中的#
字符不会影响是否存在此类漏洞,如果存在此类漏洞,攻击者可能会通过故意创建包含此字符的URL来利用此功能进行其他攻击将允许您站点上的任何动态生成的链接执行攻击。如果没有这种杠杆作用,受害者将不得不关注攻击者的链接(例如,来自电子邮件或论坛)。 底线:最好对#
字符进行百分比编码或删除,以确保安全。
You should also percent encode (or remove) other special characters,特别是以下内容之外的任何内容:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=
因为这些字符是根据RFC 3986在网址中唯一有效的字符。
答案 3 :(得分:-1)
在安全方面是否危险我不知道,但即使安全,你也不应该这样做。许多字符可能会导致用户混淆(例如任何不可见,同音字)或机器人(#
,?
)。 URL具有特定的语法,并且让用户在其中阻塞任何旧字符串不是一个好的设计。消毒它们仅包含例如小写字母和短划线和数字,许多网站(包括Stack Overflow)的方式。