这两天我有 php 的站被 xss 攻击了,可能拿到 admin 权限,上传了木马。
rails 过滤应该是自动的吧,没道理让 <script>
这种标签进库吧
不一定,看你把用户的输入用在什么场景 如果是作为 HTML 的一部分,Rails 默认的行为会转义几个关键字符,基本不会有问题 而其他场景依然可能会遇到安全问题,比如下面这种情况还是比较常见的吧
<script>
var page = <%= params[:page] %>
</script>
假如这个输入的值是 1;alert(1)
,那么默认的转义行为也救不了你,所以上面这种场景最好是这样做
<script>
var page = parseInt("<%= params[:page] %>")
</script>
parseInt("<%= params[:page] %>")
还是有问题,例如 page 可以是 '" + alert(1) + "'
正确的做法是
var page = <%== params[:page].to_json %>
另外 rails 的 to_json
比标准库的 json 更安全,它会把字符串中带的 "</script>"
也转义掉的。